C#异步接收导致全系统网络崩溃!

时间:2011-02-02 17:38:53

标签: c# visual-studio-2010 sockets .net-4.0 asynchronous

我有一个非常奇怪的错误,我在这里知之甚少,所以请耐心等待。

我有一个插座,连接到一块硬件。我同步发送,但是异步接收。

我通过以下代码发送数据:

_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次,系统范围的网络崩溃导致我的互联网连接丢失!

由于我不知道问题是什么,我会等待你的一些想法并根据需要粘贴更多代码。

2 个答案:

答案 0 :(得分:1)

可能与问题没有直接关系,但我还会在控件离开receiveCallback方法上下文之前处理套接字实例。

答案 1 :(得分:0)

如果有疑问,请嗅出网络。几年前我遇到了一个问题,网络上的计算机正在播放格式错误的数据包,并会定期关闭我们的主Cisco交换机。你正在谈论的神秘硬件可能会在5次中有1次播放一些可怕的流量。

我发现问题是在事情出错的时候嗅探网络,并且能够缩小问题范围。