Java服务器客户端绑定错误
我制作了一个服务器/客户机,它被设置为通过套接字进行通信。但是我在连接它们时遇到了一些问题 首先,我在端口7777上启动服务器(该端口是打开的),然后启动客户端,但得到一个java.net.BindException。我的编码错了吗 服务器端:Java服务器客户端绑定错误,java,sockets,port,socketexception,Java,Sockets,Port,Socketexception,我制作了一个服务器/客户机,它被设置为通过套接字进行通信。但是我在连接它们时遇到了一些问题 首先,我在端口7777上启动服务器(该端口是打开的),然后启动客户端,但得到一个java.net.BindException。我的编码错了吗 服务器端: public Server(int port) { // port = 7777 this.port = port; // dont bother with this line try { sock
public Server(int port) { // port = 7777
this.port = port; // dont bother with this line
try {
socket = new DatagramSocket(port);
} catch (SocketException ex) {
return;
}
run = new Thread(this, "Server");
run.start(); // starts thread to listen for sent client packets
}
客户端:
private boolean openConnection(String address, int port) { // returns boolean to check for established connection as well as establish it, port = 7777
try {
socket = new DatagramSocket(port); // THE ERROR IN OUTPUT POINTS TO THIS LINE
ip = InetAddress.getByName(address);
return true;
} catch (UnknownHostException | SocketException ex) {
ex.printStackTrace();
return false;
}
}
socket = new DatagramSocket(); // REMOVED THE PORT PARAMETER, works fine
堆栈跟踪:
java.net.BindException: Address already in use: Cannot bind
at java.net.DualStackPlainDatagramSocketImpl.socketBind(Native Method)
at java.net.DualStackPlainDatagramSocketImpl.bind0(DualStackPlainDatagramSocketImpl.java:81)
at java.net.AbstractPlainDatagramSocketImpl.bind(AbstractPlainDatagramSocketImpl.java:95)
at java.net.DatagramSocket.bind(DatagramSocket.java:376)
at java.net.DatagramSocket.<init>(DatagramSocket.java:231)
at java.net.DatagramSocket.<init>(DatagramSocket.java:284)
at java.net.DatagramSocket.<init>(DatagramSocket.java:256)
at chatprogram.client.Client.openConnection(Client.java:45)
at chatprogram.client.Client.<init>(Client.java:35)
at chatprogram.client.Login1$8.run(Login1.java:104)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
java.net.BindException:地址已在使用中:无法绑定
位于java.net.DualStackPlainDatagramSocketImpl.socketBind(本机方法)
位于java.net.DualStackPlainDatagramSocketImpl.bind0(DualStackPlainDatagramSocketImpl.java:81)
位于java.net.AbstractPlainDatagramSocketImpl.bind(AbstractPlainDatagramSocketImpl.java:95)
位于java.net.DatagramSocket.bind(DatagramSocket.java:376)
在java.net.DatagramSocket(DatagramSocket.java:231)
在java.net.DatagramSocket(DatagramSocket.java:284)
位于java.net.DatagramSocket。(DatagramSocket.java:256)
位于chatprogram.client.client.openConnection(client.java:45)
在chatprogram.client.client.(client.java:35)
在chatprogram.client.Login1$8.run(Login1.java:104)
在java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)中
位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
在java.awt.EventQueue.access$200(EventQueue.java:103)
位于java.awt.EventQueue$3.run(EventQueue.java:694)
在java.awt.EventQueue$3.run(EventQueue.java:692)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
位于java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
在java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:161)
位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:150)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
在java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
CMD netstat-一个输出:
我没有10个rep,所以:并且不要在客户端创建
DatagramSocket
。只需创建一个套接字
,这样它就不会在本地绑定到特定端口(就像服务器那样):
对不起,浪费了大家的时间 错误出现在客户端:
private boolean openConnection(String address, int port) { // returns boolean to check for established connection as well as establish it, port = 7777
try {
socket = new DatagramSocket(port); // THE ERROR IN OUTPUT POINTS TO THIS LINE
ip = InetAddress.getByName(address);
return true;
} catch (UnknownHostException | SocketException ex) {
ex.printStackTrace();
return false;
}
}
socket = new DatagramSocket(); // REMOVED THE PORT PARAMETER, works fine
如果我能投票击败所有在这里回应我的人,我会的。但再次感谢大家:)是否启用了Hyper V?
如果是:
Disable Hyper-V
使用以下命令保留端口
C:\WINDOWS\system32>netsh int ipv4 add excludedportrange protocol=tcp startport=49838 numberofports=1
最后:
Enable Hyper-V
检查:发布异常的堆栈跟踪。我猜您正在尝试将服务器绑定到一个已经在使用的端口(您上次运行服务器时是否记得关闭服务器?)是的,我记得关闭服务器。我现在正在发布stacktrace。@VinceEmigh好的,我添加了stacktrace和我在“netstat-an”中添加的端口。有什么想法吗?
socket=newdatagramsocket(端口)代码>您的客户端和服务器上都有。当您在服务器上调用它时,它会绑定到该端口。当您在客户端再次调用它时,它会尝试绑定(根本不应该绑定)到您的服务器已经存在的端口bounded@VinceEmigh谢谢你的回答。如果我不这样做,我还能从服务器接收数据包吗?谢谢你的回复。但是,我将无法从服务器接收数据包:socket.receive(packet);行不通