Socket통신중에 서버에서 클라이언트(WP)으로 패킷을 보낼때 클라이언트에서 어떻게 받아야 할지 모르겠어요.
-
2012년 8월 2일 목요일 오후 2:48
제가 현재 클라이언트(WP)에러 서버로 자료를 전송하는 것은 성공했거든요.
클라이언트에서 버튼을 누르면 서버에 패킷이 가고 그것에 맞는 메세지창이 떠서 실행을 하거든요.
그런데 서버에서 클라이언트로 어떻게 보내야할지 모르겠어요.
클라이언트에서 recieve를 계속 열어 놓으라고 하는데 타이머때문에 자꾸 패킷이 null로 뜨고 계속열려고 타이머를 없애면 오류가 떠버리네요..
아래 소스를 보시면 recieve를 계속 열어놓기 위해서 로그인을할때든가 자료를 전송할때 혹은 자료를 전송하고 받을때
recieve() 명령어를 추가했거든요.
그런데 타이머때문에 NullReferenceException오류가 뜨고 received가 null로 오거든요.
제가 하려는 것은 클라이언트가 로그인되있는 상태에서 서버에서 클라이언트로 자료를 보낼때 먼저 서버에서 패킷을 보내면 클라이언트에서 그 패킷을 받으려고 하거든요..
어떻게 처리해야 할지 막막하네요..
public class SocketLibrary
{
Socket s = null;
static ManualResetEvent done = new ManualResetEvent(false);
public bool EstablishTCPConnection(string host, int port)
{
s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
socketEventArg.RemoteEndPoint = new DnsEndPoint(host, port);
socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object o, SocketAsyncEventArgs e)
{
done.Set();
Receive();
});
done.Reset();
s.ConnectAsync(socketEventArg);
return done.WaitOne(100000);
}
public bool Send(byte[] data) // 패킷보냄
{
if (s != null)
{
SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
socketEventArg.RemoteEndPoint = s.RemoteEndPoint;
socketEventArg.UserToken = null;
socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object o, SocketAsyncEventArgs e)
{
done.Set();
Receive();
});
socketEventArg.SetBuffer(data,0,data.Length);
done.Reset();
s.SendAsync(socketEventArg);
return done.WaitOne(10000);
}
return false;
}
public string Receive() // 패킷받음
{
byte[] received = null;
string result="";
if (s != null)
{
SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
socketEventArg.RemoteEndPoint = s.RemoteEndPoint;
socketEventArg.SetBuffer(new byte[1024], 0, 1024);
socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object o, SocketAsyncEventArgs e)
{
socketEventArg.SetBuffer(e.Buffer, 0, e.Buffer.Length);
if (e.SocketError == SocketError.Success)
{
received = e.Buffer;
}
done.Set();
Receive();
});
done.Reset();
s.ReceiveAsync(socketEventArg);
done.WaitOne(10000);
return received;
}
}
모든 응답
-
2012년 8월 16일 목요일 오전 11:45중재자
안녕하십니까? guenyoung 님,
Microsoft TechNet의Forum 사이트를 방문해 주셔서 감사합니다.현재 문의 하신 "Socket통신중에 서버에서 클라이언트(WP)으로 패킷을 보낼때 클라이언트에서 어떻게 받아야 할지 모르겠어요." 대해 답변이 늦어져서 죄송합니다.
참조자료의 Socket에 관련한 예제를 확인해 주시기 바랍니다.
[참조자료]
Tic-Tac-Toe Over Sockets Sample
Socket Code Examples- Synchronous Client Socket Example
- Synchronous Server Socket Example
- Asynchronous Client Socket Example
- Asynchronous Server Socket Example
제시해 드린 답변이 도움이 되었기를 바랍니다.답변이 문제 해결에 도움이 되었다면 답변으로 채택을 부탁드립니다.
하지만 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해주시기 바랍니다..

