-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 通信の場合、この非同期機構はすべて必要ありません。リクエストをスレッド プールに投稿したり、コールバックをディスパッチしたりするのに時間がかかります。速度が必要な場合は、すべて 1 つのスレッドでループ内の読み取りをブロックするだけです。
  2. 3. Wireshark は特別なカーネル インターフェイス ( winpcapライブラリに実装されている) を利用し、特定のフィルターに一致するすべてのパケットのコピーを取得します。これは、多くの場合、カーネル内ファイアウォールがパケットを取得する前に行われます。
于 2012-08-12T04:09:13.793 に答える