我试图发送一个udp广播,并在c#中收到答案。虽然发送广播的作品完美,我没有收到任何答案在C#中。但是,当我把使用Wireshark一看,我可以看到一个答案已发出:接收UDP广播(C#)的答案
- 从192.168.0.141发送到192.168.0.255
- 从192.168.0.105发送到255.255.255.255(这将是答案)
Wireshark的日志:
1 0.000000 192.168.0.141 192.168.0.255 UDP Source port: 55487 Destination port: 17784
2 0.000851 192.168.0.105 255.255.255.255 UDP Source port: 17784 Destination port: 55487
这就是我的C#代码:调用udpClient.Receive时
private static byte[] SendBuffer = new byte[] { 1, 2, 3 };
public static void SendAndReceiveBroadcast(byte[] data, IPEndPoint broadcastEndpoint)
{
using(Socket broadcastSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
{
broadcastSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
broadcastSocket.SendTo(data, broadcastEndpoint);
receivePort = broadcastSocket.LocalEndPoint.ToString().Split(':')[1];
Console.WriteLine("Sent {0} from Port {1}", CollectionsHelper.ItemsToString(data, "{0:X2}"), broadcastSocket.LocalEndPoint.ToString());
broadcastSocket.Close();
}
using(Socket receiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
{
IPEndPoint broadcastAddress = new IPEndPoint(IPAddress.Any, Convert.ToInt32(receivePort));
UdpClient udpClient = new UdpClient();
udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
udpClient.Client.Bind(broadcastAddress);
IPEndPoint remoteIP = new IPEndPoint(IPAddress.Any, Convert.ToInt32(receivePort));
byte[] answer = udpClient.Receive(ref remoteIP);
}
}
程序停止。任何人都可以帮助我吗? :)