我有套接字,我希望收到多条未知长度的消息:文本,媒体,..
我看到它如何与Windows.Networking.Sockets一起工作,似乎发件人应首先发送长度,而不是我的情况
我在System.Net.Sockets中看到了一些改进,但没有找到任何侦听数据包接收的事件。
我的问题是:我是否必须时不时检查套接字以获取数据?有没有更好的实施?
答案 0 :(得分:3)
Windows Phone 8方法
使用System.Net.Sockets.Socket
类ReceiveAsync
方法支持异步网络操作。您需要做的就是在进行此调用之前正确配置SocketAsyncEventArgs
,并且只有在收到数据时才能引发处理程序。
来自this MSDN article的示例显示了如何同步执行读取操作,但在内部使用异步模式。如果从代码中删除ManualResetEvent
部分,则调用将会通过,只有在准备好处理数据时才会触发事件。
桌面/完整.NET方法
使用TcpClient
类而不是Socket
,您将能够获得实现BeginRead
的NetworkStream
对象 - 一种仅调用回调函数的异步方法当有新数据要读取(或远程端关闭)时。
BeginRead
的MSDN示例已在EndRead
的页面上完成。将这两个代码片段一起用于工作代码。答案 1 :(得分:0)
您可以使用select函数来跟踪打开的描述符并接收通过套接字到达的数据。