1

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

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);

我不想永远留在 Receive 中,因为它是阻塞的,所以这就是为什么我提出一个轮询时间来等待数据包的响应,以便有时间进入线路,并且随着可用,我当没有更多真实数据时可能会中断。

我遇到的问题是,当 client.Available > 0 为 FALSE(它有字节)时(在 do-while 中)返回 false我得到一个号码。

任何想法?我很困惑。

4

1 回答 1

0

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

编辑:也许这就足够了(伪代码):

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

您可能需要设置套接字超时以防止读取调用阻塞太久。

于 2012-08-27T16:45:05.563 回答