套接字同步接收

时间:2012-08-27 16:38:58

标签: c# .net sockets networking

我有时会遇到一个奇怪的问题。 我有一个同步套接字,我连接到并发送数据。

do
{
    try
    {
        // blocking
        int bytesRead = sender.Receive(bytesReceived);

        // process the received bytes
    }
    catch (SocketException soex)
    {
        throw new Exception(String.Format("Socket exception..." +Environment.NewLine+"[Code: {0}] {1}",soex.ErrorCode,soex.Message));
    }
}
while (sender.Poll(1500, SelectMode.SelectRead) && sender.Available > 0);

我不想永远停留在接收中,因为它是阻塞的,所以这就是为什么我把时间等待响应数据包以便有时间进入线路并且与可用,当没有更多真实数据时,我可以打破。

我遇到的问题是while(在do-while中)返回false,当client.Available> 0为FALSE(有字节) 我在while之后放了一个Debug.WriteLine来打印出可用的字节数,然后得到一个数字。

有什么想法吗?我很困惑。

1 个答案:

答案 0 :(得分:0)

可能sender.Poll返回false,但仍返回要读取的数据。也许您可以将 while -condition更改为sender.Available > 0并在循环内调用sender.Poll

修改: 也许这就足够了(伪代码):

int length;
do {
  length = socket.Read(buffer);
  // process "buffer"
} while (length > 0);

您可能需要设置套接字超时以防止Read调用阻塞太长时间。