C#UDP客户端接收速度太慢

时间:2012-08-12 03:49:15

标签: c# sockets udp

我尝试在PLC(电子设备)和PC之间进行通信。防火墙已关闭。我看到wireshark收到了包裹。

问题1:接收消息太慢了,为什么?到达我的代码需要几个时间。我的代码如下。

问题2:WireShark软件如何快速捕获此消息?我怎样才能在C#中实现这一目标?

问题3:我必须关闭防火墙以接收消息。但wireshark不需要关闭防火墙。我怎么能永远不要关闭防火墙。我基本上尝试了1对1的本地通信。

    private void udpcommincate()
    {
        sock_rcv = new UdpClient(6002);
        try
        {
            sock_rcv.BeginReceive(new AsyncCallback(recv), null);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }  
    }
    private void recv(IAsyncResult res)
    {
        IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 6002);
        plc_gelen = sock_rcv.EndReceive(res, ref RemoteIpEndPoint);
        flag= BitConverter.ToInt32(plc_gelen, 0);
        sock_rcv.BeginReceive(new AsyncCallback(recv), null);
    }

1 个答案:

答案 0 :(得分:2)

  1. 对于简单的UDP通信,您不需要所有这些异步机制 - 将请求发布到线程池,调度回调等等需要时间。如果您想要速度,只需在循环中阻塞读取,全部在一个帖子。
  2. 和3. Wireshark使用特殊的内核接口(在winpcap库中实现),该接口获取与给定过滤器匹配的所有数据包的副本,通常在内核防火墙接收它们之前。