2012-08-27 132 views
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); 

我不想留在接收永远,因为它挡住,所以这就是为什么我把民意调查有时间等待的数据包的响应来获得时间,要他到线并随着可用,我可以打破时,没有更多的数据是真实的。

我得到的问题是,while(在do-while)返回false,当client.Available> 0是FALSE(它有字节) 我把一个Debug.WriteLine后,打印出如何许多可用的字节是可用的,我得到一个数字。

有什么想法?我很困惑。

+2

为什么不简单使用'ReceiveAsync'? –

+0

哪个表达式返回false? 'sender.Poll(1500,SelectMode.SelectRead)'或'sender.Available> 0'? –

+0

也许你在调试器时有字节,但执行表达式时没有字节? –

回答

0

也许sender.Poll返回false,但仍返回要读取的数据。也许你可以改变你的,而-条件sender.Available > 0并呼吁sender.Poll循环内。

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

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

您可能需要设置一个套接字超时,以防止读取呼叫阻塞太长。