我有一个来自异步客户端方法的接收回调,它应该在内部调用socket.BeginReceive
来检查数据是否已完成发送。代码如下:
private void ReceiveCallback(IAsyncResult ar)
{
try
{
StateObject state = (StateObject)ar.AsyncState;
Socket client = state.workSocket;
int bytesRead = client.EndReceive(ar);
if (bytesRead > 0)
{
state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));
client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReceiveCallback), state);
}
else
{
if (state.sb.Length > 1)
{
response = state.sb.ToString();
}
File.AppendAllText(DataDisplay.Properties.Settings.Default.rawDataLog, response + "\r\n");
receiveDone.Set();
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
这个问题是当代码到达client.BeginReceive
时,没有任何反应。我知道这听起来很模糊,所以让我试着解释一下。我在整个代码中设置了断点,看看它可能会走向何方,我无法弄明白。我已经尝试了else
案例,ReceiveCallback
的开头,receivedone.Set()
在主代码中返回,catch
语句等等无效。< / p>
最令人困惑的部分是,当我用我编写的测试服务器运行它时,它可以正常工作。这段代码基本上来自异步套接字上的MSDN示例,以防它看起来很熟悉。只有当我尝试使用第三方设备时,我才会受到阻碍。
有什么想法可以在这里发生什么?
答案 0 :(得分:1)
是否有可能在您进行调试时,实际上没有收到任何内容,因此它基本上永久地等待接收线程?请注意BeginReceive
将使用ThreadPool
线程,并将回调您发布的方法。如果它没有回电话,那么我的第一印象是它没有收到任何东西。