C# 클라이언트 TCP Network Class
C#/Tip :
2010. 8. 3. 23:04
항상 tcp 클라이언트 만들때마다 코딩하려니깐 너무 너무 귀찮아서..
그냥 이거를 빼대로 만들려고 올립니다.
코드가 잘짜여졌거나 좋은건지는 전혀 모르겠고요..
필요할때 가져가서 고쳐서 쓸려고 합니다...
class Network
{
private Socket sock;
private MainApp app;
private Thread NetworkThread;
private delegate void ExceptionCallback(string msg);
public Network(MainApp app)
{
this.app = app;
}
public bool Connect()
{
bool isConnect = true;
if (sock != null) sock.Close();
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
while (true)
{
try
{
IPAddress svrIp = IPAddress.Parse("127.0.0.1");
IPEndPoint ipep = new IPEndPoint(svrIp, 9507);
sock.Connect(ipep);
if (sock.Connected)
{
isConnect = true;
break;
}
}
catch (SocketException ex)
{
isConnect = false;
app.ExceptionWrite("서버와 연결을 실패. 재접속 실행함.");
}
}
app.ExceptionWrite("서버와 연결 됨.");
return isConnect;
}
public void Receive()
{
while (true)
{
Thread.Sleep(500);
byte[] data = new byte[2048];
try
{
long startTicks = DateTime.Now.Ticks;
int size = sock.Receive(data);
if (size <= 0) { Connect(); }
else app.ConvertData(Encoding.Default.GetString(data, 0, size));
TimeSpan workticks = new TimeSpan(DateTime.Now.Ticks - startTicks);
app.ExceptionWrite("서버로부터 받은 데이터 : " + size + "Byte / 걸린시간 : " + workticks.TotalSeconds + "초");
}
catch (SocketException ex)
{
app.ExceptionWrite(ex.Message);
Connect();
}
}
}
public void ThreadStart()
{
NetworkThread = new Thread(new ThreadStart(Receive));
NetworkThread.Start();
}
public void ThreadAbort()
{
if (NetworkThread != null) NetworkThread.Abort();
if (sock.Connected) sock.Close();
}
}
'C# > Tip' 카테고리의 다른 글
| C# 네트워크(Network) TCP 서버 만들어보기 (0) | 2010.08.14 |
|---|---|
| C# SQLITE API (0) | 2010.08.12 |
| C# 폼간 데이터 전송(부모 자식간 데이터 전송) (4) | 2010.04.02 |
| C# 형변환시 변환유무 확인하기 (0) | 2010.03.26 |
| c# 네트워크프로그래밍 기초... (0) | 2009.12.30 |


