我有一个服务器正在等待客户端通过 DatagramSocket 发送数据包。但是当在客户端中我使用与服务器相同的端口时(以便它们可以通信)我在客户端得到一个异常:
Exception in thread "main" java.net.BindException: Address already in use: Cannot bind
at java.net.DualStackPlainDatagramSocketImpl.socketBind(Native Method)
at java.net.DualStackPlainDatagramSocketImpl.bind0(DualStackPlainDatagramSocketImpl.java:80)
at java.net.AbstractPlainDatagramSocketImpl.bind(AbstractPlainDatagramSocketImpl.java:93)
at java.net.DatagramSocket.bind(DatagramSocket.java:372)
at java.net.DatagramSocket.<init>(DatagramSocket.java:222)
at java.net.DatagramSocket.<init>(DatagramSocket.java:279)
at tp.Repositorio.main(Cliente.java:146)
Run Code Online (Sandbox Code Playgroud)
所以在服务器端,我有一个线程正在处理数据包。像这样的东西:
addr = InetAddress.getByName("localhost");
DatagramSocket socket = new DatagramSocket(5008, addr);
DatagramPacket packet = new DatagramPacket(buff, buff.length);
while(true)
{
s.receive(packet);
// and then it throws another thread to treat the packet...
}
Run Code Online (Sandbox Code Playgroud)
在客户端,我有这样的事情:
InetAddress inet;
inet = InetAddress.getByName("localhost");
s_data = new DatagramSocket(5008, inet);
Run Code Online (Sandbox Code Playgroud)
我试图更改双方的端口,但它也给了我这个例外。如果我将端口更改为例如服务器中的 5003 和客户端中的 5004,它不会给我任何异常(当然)但它们无法相互连接。
你们有什么想法可以解决这个问题吗?
谢谢。
编辑:
这是以下客户端代码(称为 repositorio): …