Java服务器客户端绑定(bind)错误

标签 java sockets port socketexception

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

首先,我在端口 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;
        }
    }

堆栈跟踪:

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)

CMD netstat -an 输出:

我没有 10 个代表,所以:http://prntscr.com/4f1hmfhttp://prntscr.com/4f1hs3

最佳答案

不要在客户端创建DatagramSocket。只需创建一个Socket,这样它就不会在本地绑定(bind)到特定端口(就像服务器那样):

new Socket(address, port);

关于Java服务器客户端绑定(bind)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25431436/

相关文章:

java - Selenium Java 对元素执行的单击不起作用

sockets - 如何确定打开的套接字是 TCP 还是 unix 域套接字?

java - 将套接字输出发送到 GUI 时出现问题

macos - 在 Mac OS 10.9 中启动并运行 Apache Tomcat

deployment - 默认端口(8081)更改为 Windows 10 中 jfrog-artifactory-oss-7.3.2 中的不同端口

JavaFX:显示文本而不是 boolean 值(true/false)

java - 我们可以在java中回滚文件mkdir吗?

python - 创建多线程 tcp 服务器 python 3

networking - 如何在运行的vagrant box上转发端口

java - 我该如何在 Java swing 中进行这种布局?