【问题标题】:C# asynchronous receive causes system-wide network crash!C#异步接收导致系统范围的网络崩溃!
【发布时间】:2011-02-03 05:14:30
【问题描述】:

我有一个非常奇怪的错误,我对此知之甚少,所以请多多包涵。

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

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

_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 次没有问题,一切正常。同样的命令,同样的硬件,同样的一切......

五分之一的情况下,系统范围的网络崩溃导致我的互联网连接丢失!

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

【问题讨论】:

  • 您正在与之交谈的硬件是什么?
  • “系统范围”是指网络上的所有计算机都失去连接,还是只有一台运行代码的计算机?
  • 只是运行代码的计算机。
  • 硬件是某种电子过滤器。它有一个到外部世界的 tcp/ip 连接,具有分配的 IP 和端口
  • 那么,您的互联网流量是否必须通过这个“电子过滤器”?

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


【解决方案1】:

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

【讨论】:

  • 目前我在整个程序中一直使用套接字,并且只有在退出程序后才将其处理掉。你会建议不要这样做吗?
【解决方案2】:

如有疑问,请嗅探网络。几年前我遇到了一个问题,网络上的一台计算机正在广播格式错误的数据包,并且会定期关闭我们的主 Cisco 交换机。您正在与之交谈的神秘硬件可能会在五分之一的时间内广播一些可怕的流量。

我在出现问题时通过嗅探网络发现了问题,并能够缩小问题范围。

【讨论】:

    猜你喜欢
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多