Socket客户端持续监听服务器端发来的消息
最近搞一个WP8的小程序,要用到TCP通信,但是发现WP的.net framework库里边就只让用Socket。无奈客户端这边就只能用Socket来做。
但是现在有一个问题就是我找了一些资料,都是写服务器端持续监听客户端的消息。但是这边有个需求就是客户端要持续监听服务器端发来的消息,然后进行处理。
我自己实现了客户端的receive 方法。单独调用是没问题的。但是我想开启一个线程,然后循环调用receive方法,发现只有第一次能receive到,以后都是超时。
附上这个receive的代码,其实就是网上一个现成的例子。
public string Receive()
{
string response = "Operation Timeout";
if (_socket != null)
{
// Create SocketAsyncEventArgs context object
SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
socketEventArg.RemoteEndPoint = _socket.RemoteEndPoint;
socketEventArg.SetBuffer(new Byte[MAX_BUFFER_SIZE], 0, MAX_BUFFER_SIZE);
socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e)
{
if (e.SocketError == SocketError.Success)
{
response = Encoding.UTF8.GetString(e.Buffer, e.Offset, e.BytesTransferred);
response = response.Trim('\0');
}
else
{
response = e.SocketError.ToString();
}
_clientDone.Set();
});
_clientDone.Reset();
_socket.ReceiveAsync(socketEventArg);
_clientDone.WaitOne(TIMEOUT_MILLISECONDS);
}
else
{
response = "Socket is not initialized";
}
return response;
}
主要就是想搞清楚:
- 是不是Socket本来就不允许客户端一直监听,只能在需要的时候Receive一下?
- 这个持续监听的需求大概应该怎么解决?
- 我这个开线程while(true)监听的做法可不可取的?
谢谢大大~~
不来方·夕莉
10 years, 2 months ago