Windows Phone 8 - 保持套接字打开并接收未知长度的数据

时间:2013-12-23 08:36:19

标签: c# sockets windows-phone-8 communication tcpclient

我有套接字,我希望收到多条未知长度的消息:文本,媒体,..

我看到它如何与Windows.Networking.Sockets一起工作,似乎发件人应首先发送长度,而不是我的情况

我在System.Net.Sockets中看到了一些改进,但没有找到任何侦听数据包接收的事件。

我的问题是:我是否必须时不时检查套接字以获取数据?有没有更好的实施?

2 个答案:

答案 0 :(得分:3)

Windows Phone 8方法

使用System.Net.Sockets.SocketReceiveAsync方法支持异步网络操作。您需要做的就是在进行此调用之前正确配置SocketAsyncEventArgs,并且只有在收到数据时才能引发处理程序。

来自this MSDN article的示例显示了如何同步执行读取操作,但在内部使用异步模式。如果从代码中删除ManualResetEvent部分,则调用将会通过,只有在准备好处理数据时才会触发事件。

桌面/完整.NET方法

使用TcpClient类而不是Socket,您将能够获得实现BeginReadNetworkStream对象 - 一种仅调用回调函数的异步方法当有新数据要读取(或远程端关闭)时。

  • 注意:BeginRead的MSDN示例已在EndRead的页面上完成。将这两个代码片段一起用于工作代码。

答案 1 :(得分:0)

您可以使用select函数来跟踪打开的描述符并接收通过套接字到达的数据。