Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java服务器客户端绑定错误_Java_Sockets_Port_Socketexception - Fatal编程技术网

Java服务器客户端绑定错误

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

我制作了一个服务器/客户机,它被设置为通过套接字进行通信。但是我在连接它们时遇到了一些问题

首先,我在端口7777上启动服务器(该端口是打开的),然后启动客户端,但得到一个java.net.BindException。我的编码错了吗

服务器端:

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);行不通