【发布时间】:2021-10-28 04:09:35
【问题描述】:
我正在尝试连接两个简单的 Java 套接字,但无论我输入什么端口号,我都会收到相同的错误:地址已在使用中:JVM_Bind
现在我发现我通过使用 0 作为 ServerSocket 构造函数的参数,然后调用 getLocalPort 方法来获取第一个可用端口,然后将其作为参数传递给 Socket 构造函数中的客户端类,从而解决了这个问题。
所以,在 NetBeans IDE 中,我首先运行服务器,从控制台获取可用端口,复制数字并手动将其作为“localhost”之后的第二个参数输入到 Socket 构造函数并运行客户端。
现在预期的输出将是“已连接”,因为服务器已接受客户端,但相反,我得到的可用端口号增加了 1。
为什么会这样?似乎当我在 client.java 文件中单击运行时,我再次启动服务器而不是客户端。
服务器.java
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class server {
public static void main(String[] args) throws IOException {
ServerSocket s1 = new ServerSocket(58801);/I manually add the available port number here
System.out.println(s1.getLocalPort());
Socket ss = s1.accept();
System.out.println("Client connected");
}
}
client.java:
import java.io.IOException;
import java.net.Socket;
public class client {
public static void main(String[] args) throws IOException {
Socket s = new Socket("localhost", 58801); // I here manually add the available port number
}
}
【问题讨论】:
-
你使用
0,作为ServerSocket(0);中的一个端口,这个端口是保留的,你不能用。 -
@GiorgiTsiklauri 哦,我只是错误地将其保留为 0,我也确实在那里传递了可用端口号,但我总是得到同样的错误:地址已在使用中:JVM_Bind
-
这很好用。我无法重现该问题。最有可能的是,您使用该端口.. 通过
netstat检查。 -
您的代码在我的机器上运行良好,只要我在客户端之前运行服务器。
-
@GonenI 你是对的。通过按下 NetBeans 中的运行按钮,我实际上是在再次运行同一个文件。我只是右键单击客户端,选择运行,我得到了想要的结果。谢谢。
标签: java sockets serversocket