2009-08-30 18 views
1

在套接字级别上使用异步方法时,第一次看起来应该没有问题,即从关联的网络流发送和接收数据,或者直接在套接字上“直接”发送数据。但是,你可能已经知道,有。C#TCP套接字,在“相同”时间(.NET CF)异步读写,如何?

该问题在Windows Mobile平台和精简版框架上特别突出显示。

我使用异步方法,BeginReceive并且执行回调函数结束,用于从异步接收数据(EndReceive)挂起的异步读取。结果。

由于我需要不断从套接字接收数据,有一个等待数据的循环。 当我想发送数据时,问题就开始了。为此,在通过套接字发送一些数据之前,我使用EndReceive“强制”异步读取的结束。有一个很大的延迟对(有时你只是不能等待这超时)。超时时间太长,而我需要立即发送数据如何?我不想关闭套接字并重新连接。

我使用同步方法发送发送数据(尽管结果与异步方法BeginSend/EndSend相同)。发送完成后,我开始再次接收数据。

资源,我知道:

P.S.:I试图发送数据而不结束异步接收但然后我得到SocketException:一个阻塞操作当前正在执行(错误码:10036)。

在此先感谢!我希望,我不是一个人在这“一个小问题” .. :)

回答

1

你有没有考虑使用轮询(或选择多个插座)的静态方法,而不是BeginReceive以检查是否有数据读取?在我看来,这会给你带来麻烦。

+0

是的,的确,使用轮询方法,我总是可以通过套接字读写,没有阻塞,错误,异常(到目前为止)等。 非常感谢!我浪费了2天的时间寻找这个答案。 :) 参考:http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.poll.aspx – Beaver 2009-08-31 00:00:26

+0

@你可以解释你在代码中使用poll的地方吗? (或Yakeen你建议把代码)使用异步套接字? – 2015-03-30 18:28:54