2009-06-24 5 views
0

スレッド内で以下の関数を使用して ソケット経由でバイト[]を受信して​​います。私のマシンは2つのネットワークアダプタを持っているので、バイト[] を2回受信しています。同じバイト[]をスキップします。c#を使用してソケットから受信した後続のバイト[]をスキップする方法

これを達成するにはどうすればよいですか?

public void Receiver() 
{ 

     strMultpileBatchString = ""; 
     string mcastGroup = ReceiverIP; 
     string port = ReceiverPort; 

     //Declare the socket object. 
     Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
     //Initialize the end point of the receiver socket. 
     IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse(port)); 
     s.SetSocketOption(SocketOptionLevel.Udp, SocketOptionName.NoDelay, 1); 
     s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1); 
     s.Bind(ipep); 
     s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 0); 
     IPAddress ip = IPAddress.Parse(mcastGroup); 
     s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip)); 


     while (true) 
     { 
      byte[] b = new byte[BytesSize]; 
     } 
} 

答えて

3
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse(port));   

私はこれが問題IPAddress.Anyの原因であると考え、呼び出す前にMSDN

」から特定のIP(2枚のネットワークカードの1)

を指定しようバインドするには、まずデータを通信するローカルIPEndPointを作成する必要があります。割り当てられているローカルアドレスを気にしない場合は、IPAddress .. ::。Anyをアドレスパラメータとして使用し、最も適切なネットワークアドレスが割り当てられます。これにより、複数のネットワークインターフェイスを使用している場合にアプリケーションを簡素化できます。

関連する問題