我希望我的客户端应用程序能够连接到服务器应用程序。
问题是我的客户端不知道服务器 ip(在 LAN 中)。
所以我尝试使用 java 对象MulticastSocket。幸运的是,Oracle 有一个带有Broadcasting 示例的页面。
在这里,我重新排列了它以供我使用。
服务器代码:
long FIVE_SECONDS = 5000;
int port = 4445;
DatagramSocket socket = new DatagramSocket(port);
while (true) {
System.out.println("Server running...");
try {
// message for client
String dString = "Hello Client";
byte[] buf = dString.getBytes();
// send
InetAddress group = InetAddress.getByName("230.0.0.1");
DatagramPacket packet = new DatagramPacket(buf, buf.length, group, port);
socket.send(packet);
// sleep for a while
try {
Thread.sleep((long)(Math.random() * FIVE_SECONDS));
}
catch (InterruptedException e) {
System.err.println("Interrupted Exception");
}
} catch (IOException e) {
System.err.println("IOException");
}
}
客户端代码:
MulticastSocket socket = new MulticastSocket(4445);
InetAddress address = InetAddress.getByName("230.0.0.1");
socket.joinGroup(address);
// receive the message
byte[] buf = new byte[256];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
String received = new String(packet.getData(), 0, packet.getLength());
System.out.println("Received: " + received);
socket.leaveGroup(address);
socket.close();
当我运行 Srver: 没问题,但是当我尝试运行客户端时,它会抛出java.net.BindException: Address already in use
导致客户端和服务器都在监听/发送信息port 4445
。
但不是吗?要相互连接,它们必须具有相同的端口号,否则它们将永远不会“相遇”。
我能解决这个问题吗?如何?
端口号是否正确?
这是对未知服务器 ip 问题的正确解决方案吗?
谢谢!