有以下主机测试代码:
string localIP = IP.ToString();
UdpClient udpClient = new UdpClient();
udpClient.EnableBroadcast = true;
IPEndPoint broadcastEndPoint = new IPEndPoint(IPAddress.Parse("255.255.255.255"), 11000);
try
{
var counter = 0;
while (counter < 5)
{
byte[] sendBytes = Encoding.ASCII.GetBytes(localIP);
udpClient.Send(sendBytes, sendBytes.Length, broadcastEndPoint);
counter++;
Thread.Sleep(5000);
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{
udpClient.Close();
}
以及客户端的以下代码:
UdpClient udpClient = new UdpClient(11000);
string receivedData = null;
try
{
IPEndPoint receiveEndPoint = new IPEndPoint(IPAddress.Any, 11000);
byte[] receiveBytes = udpClient.Receive(ref receiveEndPoint);
receivedData = Encoding.ASCII.GetString(receiveBytes);
Console.WriteLine("Received broadcast from {0} : {1}\n",
receiveEndPoint.ToString(),
receivedData);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{
udpClient.Close();
}
当主机和客户端在同一台计算机上启动时,一切正常并且数据包到达客户端。但是,当我尝试在连接到同一本地网络的不同计算机上运行它们(手机上的调制解调器模式充当本地网络)时,数据包停止到达。两台机器上的防火墙都被禁用,所以我不知道问题是什么
我尝试将广播发送到较小的范围(192.255.255.255),但这也没有帮助。当您尝试调试客户端时,调试器将停止,并且程序将停止在 receiveData = Encoding.ASCII.GetString(receiveBytes) 行上显示任何生命迹象。我希望有人能提出解决方案
我找到了解决问题的方法。事实证明,必须为单独使用的每个本地网络计算广播 IP。我只需获取本地网络地址及其掩码,用它来计算该网络的广播 IP 并向其发送 UDP 数据包。主机代码:
获取地址方法代码:
客户端代码: