0

コンピューターでいくつかの仮想 IP を使用すると、どの IP でメッセージを受信したかを知る必要があるメッセージが表示されます。

私は ReceiveMessageFrom を使用しましたが、select を追加するまでうまくいきました。受け取った情報を選択した後、有効ではありません

私のコード:

    IPEndPoint ipep2 = new IPEndPoint(IPAddress.Any , xxx);
    Socket socket2 = new Socket(AddressFamily.InterNetwork, 
        SocketType.Dgram, ProtocolType.Udp);
    socket2.Bind(ipep2);

    ArrayList copySocketsList = new ArrayList();
    copySocketsList.Add(socket2);

    Socket.Select(copySocketsList  , null , null , 1000);

    foreach(Socket soc in copySocketsList)
    {
        int recv = soc.ReceiveMessageFrom(data , 0 , 1024 , ref flags , ref Remote , out ipInfo);

    }

その例では ipInfo は有効ではありませんが、選択を削除すれば問題ありません

4

1 に答える 1

1

あなたはこれを見たいと思うかもしれません: Socket.ReceiveMessageFrom メソッド

ただし、返された IPPacketInformation オブジェクトは、ソケット オプションが設定された後にローカル コンピュータに到着したパケットに対してのみ有効です。ソケットがローカル エンドポイントに (Bind メソッドによって明示的に、または Connect、ConnectAsync、SendTo、または SendToAsync メソッドのいずれかによって暗黙的に) バインドされてから、ReceiveMessageFrom メソッドへの最初の呼び出しの間にパケットが送信された場合、ReceiveMessageFrom メソッドへの呼び出しこれらのパケットに対して無効な IPPacketInformation オブジェクトを返します。

すべての IPPacketInformation オブジェクトが有効であることを確認するには、SetSocketOption(SocketOptionLevel, SocketOptionName, Boolean) メソッドを使用してローカル エンドポイントにバインドする前に、アプリケーションで PacketInformation ソケット オプションを true に設定する必要があります。

于 2012-08-21T12:15:17.927 に答える