【问题标题】:C# TCP socket, asynchronous read and write at the "same" time (.NET CF), how?C# TCP 套接字,“同时”异步读写(.NET CF),怎么样?
【发布时间】:2010-11-24 04:47:26
【问题描述】:

乍一看,在套接字级别使用异步方法时,从关联的网络流或“直接”在套接字上发送和接收数据应该没有问题。但是,您可能已经知道了。

这个问题在 Windows Mobile 平台和 Compact Framework 上尤为突出。

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

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

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

我知道的资源:

PS:我尝试在不结束异步接收的情况下发送数据,但后来我得到 SocketException: A blocking operation is current execution (ErrorCode: 10036)。

提前致谢!我希望我不是一个人在这个“一个小问题”.. :)

【问题讨论】:

    标签: c# sockets compact-framework


    【解决方案1】:

    您是否考虑过使用 Poll(或 Select for multiple sockets)静态方法而不是 BeginReceive 来检查是否有数据可供读取?在我看来,这给你带来了麻烦。

    【讨论】:

    • 是的,确实,使用 Poll 方法我总是可以通过套接字进行读写,而不会阻塞、错误、异常(到目前为止)等。非常非常感谢!我浪费了 2 天时间来寻找这个答案。 :) 参考:msdn.microsoft.com/en-us/library/…
    • @Beaver 你能解释一下你在代码中使用 poll 的地方吗?使用异步套接字时(或您建议放置代码的地方)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多