我在线程内使用下面的函数来接收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];
}
}
答案 0 :(得分:3)
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse(port));
我认为这是IPAddress.Any问题的原因,尝试指定具体的IP(两个网卡之一)
来自MSDN
“在调用Bind之前,必须先创建要从中传输数据的本地IPEndPoint。如果不关心分配了哪个本地地址,可以使用IPAddress .. ::。Any作为地址创建IPEndPoint。参数,底层服务提供商将分配最合适的网络地址。如果您有多个网络接口,这可能有助于简化您的应用程序“