我正在努力让动态服务器检测工作。我的代码在我的计算机上使用IpAddress.Broadcast(255.255.255.255)与服务器和客户端时都有效。但是,当我将其中一个组件移动到另一台计算机时,广播地址255.255.255.255不再起作用(我不再得到任何结果)。
我使用子网计算器计算了网络的广播地址。 广播地址是:x.x.x.191。 另一台计算机的IP是:x.x.x.119
当我使用直接IP时,它确实有效。当我使用计算的广播IP时,我的程序崩溃(错误消息:远程主机拒绝连接)。
客户代码:
var Client = new UdpClient();
var RequestData = Encoding.ASCII.GetBytes("Request ParkXManagementSystem IP");
var ServerEp = new IPEndPoint(IPAddress.Any, 0);
Client.EnableBroadcast = true;
while (serverFound == false)
{
//Client.Send(RequestData, RequestData.Length, new IPEndPoint(IPAddress.Broadcast, 8888)); //Broadcast to 255.255.255.255
IPAddress address = IPAddress.Parse("x.x.x.191"); //Broadcast adres
//IPAddress address = IPAddress.Parse("x.x.x.119"); // direct adres
Client.Send(RequestData, RequestData.Length, new IPEndPoint(address, 8888));
var ServerResponseData = Client.Receive(ref ServerEp);
var ServerResponse = Encoding.ASCII.GetString(ServerResponseData);
if (ServerResponse.ToString().ToLower().Contains("parkxmanagement"))
{
//Server is found!
serverFound = true;
//Enable button to login
mUiContext.Post(UpdateGUI, BTTN_LogIn);
Properties.Settings.Default.parkXManagementSystemIP = ServerEp.Address.ToString();
Properties.Settings.Default.Save();
Properties.Settings.Default.Upgrade();
}
}
我已经有了一个动态计算广播地址的库,但出于测试目的,我在这里硬编码了。
我的猜测是崩溃了,因为我已将IP端点绑定到广播地址,但返回的地址不是广播地址。 所以我想我需要为子网中的每个地址创建一个端点?