我在Java中有一个客户端服务器体系结构,服务器使用固定端口进行侦听。客户端可以使用服务器IP地址连接,但我想使用端口扫描网络,以便用户不必处理服务器的IP地址。目前,我通过查看客户端的ip并使用客户端的ip(192.168.1.0 - I循环到1-255,最后一部分)循环到每个可能的地址来实现这一点。这种方法有效但是在java中有更好的方法吗?
for (int a = 0; a < 256; a++) {
try {
String ServerIp = clientIpLast3Parts + "." + a;
InetAddress IPAddress = InetAddress.getByName(ServerIp);
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, PORT);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(
receiveData, receiveData.length);
clientSocket.receive(receivePacket);
InetAddress ServerIp = receivePacket.getAddress();
String modifiedSentence = new String(receivePacket.getData());
ip = ServerIp.getHostAddress().toString();
if (modifiedSentence != null) {
//Got it
break;
}
} catch (Exception e1) {
}
答案 0 :(得分:0)
如果您需要自动重新配置拓扑,我建议您使用多播通知。服务器发送周期性组播数据包及其指定的单播IP和端口。任何客户端在启动时都会侦听该组播组,直到收到服务器IP /端口的数据包为止。或者使用DNS:)