0
udp 멀티 캐스트 수신자가 패킷을 두 번 수신하는 경우가 있습니다..NET UDP 멀티 캐스트 수신
private static void setupUdpMulticastClient()
{
//IPEndPoint ipRXEnd = new IPEndPoint(IPAddress.Any,multicastPort);
IPEndPoint ipRXEnd = new IPEndPoint(IPAddress.Parse(emulatorIpaddr), multicastPort);
udpMulticastClient = new UdpClient();
udpMulticastClient.Client.ExclusiveAddressUse = false;
udpMulticastClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
udpMulticastClient.Client.Bind(ipRXEnd);
}
emulatorIpaddr가 192.x.x.x 주소는 다음과 같습니다 : I는 멀티 캐스트 클라이언트를 설정합니다. 다음과 같이
수신기는 같습니다
public static void MulticastSetBeginReceive()
{
//IPAddress ipSSDP = IPAddress.Parse(multicastIP);
IPAddress ipSSDP = IPAddress.Parse(emulatorIpaddr);
IPEndPoint ipRXEnd = new IPEndPoint(ipSSDP, multicastPort);
UdpState udpListener = new UdpState();
udpListener.e = ipRXEnd;
if (udpMulticastClient == null)
{ setupUdpMulticastClient();}
udpListener.u = udpMulticastClient;
udpMulticastClient.BeginReceive(new AsyncCallback(MulticastReceiveCallback), udpListener);
}
비동기 콜백을 계기로 2 회를 트리거 것으로 보인다. 완벽을 위해, 여기 콜백 코드 :
public static void MulticastReceiveCallback(IAsyncResult ar)
{
try
{
UdpClient u = (UdpClient)((UdpState)(ar.AsyncState)).u;
IPEndPoint e = (IPEndPoint)((UdpState)(ar.AsyncState)).e;
if (u.Client != null)
{
Byte[] receiveBytes = u.EndReceive(ar, ref e);
string receiveString = Encoding.ASCII.GetString(receiveBytes);
string from = e.ToString();
string to = ((UdpState)(ar.AsyncState)).e.ToString();
msgReceiver(DateTime.Now.ToLocalTime(), from, to, receiveString);
}
if (running)
MulticastSetBeginReceive();
}
catch (Exception ex)
{
log.Debug(ex.Message);
log.Debug(ex.StackTrace);
}
}
내가 윈도우 7 및 .NET을 실행하고 4
사람이 코드에 문제를 참조하거나 .NET의 문제를 알고 있나요 또는 7을 획득하면 그와 같은 행동을하게됩니다.
receivestring를 들어