【发布时间】:2010-11-24 04:47:26
【问题描述】:
乍一看,在套接字级别使用异步方法时,从关联的网络流或“直接”在套接字上发送和接收数据应该没有问题。但是,您可能已经知道了。
这个问题在 Windows Mobile 平台和 Compact Framework 上尤为突出。
我使用 异步方法、BeginReceive 和回调函数,该函数执行结束从异步接收的数据 (EndReceive) 的挂起异步读取。结果。
由于我需要不断地从套接字接收数据,所以有一个循环等待数据。 当我想发送数据时,问题就开始了。为此目的,在通过套接字发送一些数据之前,我使用 EndReceive“强制”结束异步读取。有一个很大的延迟(有时你不能等待这个超时)。超时时间过长,我需要立即发送数据。 如何?我不想关闭套接字并重新连接。
我使用同步方法 Send 发送数据(虽然结果与 async 相同。方法 BeginSend/EndSend)。发送完成后,我再次开始接收数据。
我知道的资源:
- stackoverflow.com...properly-handling-network-timeouts-on-windows-ce - 关于超时的评论,
- developerfusion.com...socket-programming-in-c-part-2/ - 简单的客户端/服务器解决方案,使用异步方法接收数据和同步方法 Send 发送数据。
PS:我尝试在不结束异步接收的情况下发送数据,但后来我得到 SocketException: A blocking operation is current execution (ErrorCode: 10036)。
提前致谢!我希望我不是一个人在这个“一个小问题”.. :)
【问题讨论】:
标签: c# sockets compact-framework