gpt4 book ai didi

java - 地址已在使用异常(多播套接字)

转载 作者:行者123 更新时间:2023-12-01 14:42:05 25 4
gpt4 key购买 nike

我正在尝试编写服务器和客户端来提供服务,以告知当前时间。我的代码:

服务器

public class TimeServer {

public static void main(String[] args) {
try {
final DatagramSocket so = new DatagramSocket(8189);
new Thread(new Runnable() {
@Override
public void run() {
try {
while (true) {
try {
InetAddress group = InetAddress.getByName("200.20.2.0");
byte[] buf = new byte[256];
Calendar cal = Calendar.getInstance();
buf = cal.toString().getBytes();
DatagramPacket packet = new DatagramPacket(buf, buf.length,
group, 8189);
so.send(packet);
} catch (IOException ex) {
ex.printStackTrace();
}
Thread.sleep((int)(Math.random() * 5));
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}).start();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}

客户端

public class TimeClient {

public static void main(String[] args) {
try {
MulticastSocket so = new MulticastSocket(8190);
InetAddress group = InetAddress.getByName("200.20.2.0");
so.joinGroup(group);

//5 razy czekamy na otrzymanie od serwera wiadomosci
for (int a=0; a<5; a++) {
byte[] buf = new byte[256];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
so.receive(packet);

String recv = new String(packet.getData());
System.out.println("RECEIVED: " + recv);
}

so.leaveGroup(group);
so.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}

}

启动服务器然后启动客户端时出现以下错误:

java.net.BindException: Address already in use
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.AbstractPlainDatagramSocketImpl.bind(AbstractPlainDatagramSocketImpl.java:95)
at java.net.DatagramSocket.bind(DatagramSocket.java:376)
at java.net.MulticastSocket.<init>(MulticastSocket.java:172)
at java.net.MulticastSocket.<init>(MulticastSocket.java:137)
at timeclient.TimeClient.main(TimeClient.java:13)

请帮忙,谢谢

编辑:我更改了客户端端口,现在出现异常:

java.net.SocketException: Not a multicast address
at java.net.MulticastSocket.joinGroup(MulticastSocket.java:306)
at timeclient.TimeClient.main(TimeClient.java:15)

现在是什么情况?

最佳答案

每个端口只能由单个应用程序使用。在您的情况下,您的服务器和客户端(2个应用程序)正在尝试使用导致异常的同一端口。

要修复此问题,请将客户端端口从 8189 更改为 8190

关于java - 地址已在使用异常(多播套接字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15852037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com