如何使用c#跳过从socket接收的后续byte []

时间:2009-06-24 13:54:29

标签: c# .net sockets c#-3.0

我在线程内使用下面的函数来接收byte [] via 插座。由于我的机器有两个网络适配器,它接收字节[] 两次。我想跳过随后收到的相同字节[]。

我该怎样做才能实现这个目标?

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];
        }
}

1 个答案:

答案 0 :(得分:3)

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

我认为这是IPAddress.Any问题的原因,尝试指定具体的IP(两个网卡之一)

来自MSDN

  

“在调用Bind之前,必须先创建要从中传输数据的本地IPEndPoint。如果不关心分配了哪个本地地址,可以使用IPAddress .. ::。Any作为地址创建IPEndPoint。参数,底层服务提供商将分配最合适的网络地址。如果您有多个网络接口,这可能有助于简化您的应用程序“