-1

我尝试在 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);
    }
4

1 回答 1

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