我有一个非常奇怪的错误,我在这里知之甚少,所以请耐心等待。
我有一个插座,连接到一块硬件。我同步发送,但是异步接收。
我通过以下代码发送数据:
_dicSockets[lclIPEndPoint].Send(lclBytesSent, lclBytesSent.Length, SocketFlags.None);
并通过以下代码接收:
protected virtual void receiveCallback(IAsyncResult ar)
{
PFDoReceiveDataArgs receiveData = (PFDoReceiveDataArgs)ar.AsyncState;
Socket lclSocket = receiveData.MySocket;
etc...
当硬件在10秒内快速响应时,此方案可正常工作。但是,当硬件响应时间较长(约5分钟)时会发生疯狂的问题。在此期间,有一个处于while循环中的线程,检查命令是否收到响应。
我知道硬件在这段时间内正常运行。我发送命令,5分钟后,响应到了。 5次中的4次,没有问题,一切都按预期工作。相同的命令,相同的硬件,同样的一切......
5次中的1次,系统范围的网络崩溃导致我的互联网连接丢失!
由于我不知道问题是什么,我会等待你的一些想法并根据需要粘贴更多代码。
答案 0 :(得分:1)
可能与问题没有直接关系,但我还会在控件离开receiveCallback方法上下文之前处理套接字实例。
答案 1 :(得分:0)
如果有疑问,请嗅出网络。几年前我遇到了一个问题,网络上的计算机正在播放格式错误的数据包,并会定期关闭我们的主Cisco交换机。你正在谈论的神秘硬件可能会在5次中有1次播放一些可怕的流量。
我发现问题是在事情出错的时候嗅探网络,并且能够缩小问题范围。