无法连接 Java 套接字



我正在尝试连接两个简单的Java套接字,但无论我键入的端口号是什么,我都会得到相同的错误:地址已经在使用:JVM_Bind

现在我发现我通过使用使用0作为参数到ServerSocket构造函数,然后调用getLocalPort方法来获得第一个可用的端口,然后将其传递给我的客户端类在Socket构造函数作为参数。

因此,在NetBeans IDE中,我首先运行服务器,从控制台获取可用端口,复制数字并手动将其输入到Socket构造函数中,作为"localhost"之后的第二个参数。并运行客户端。

现在预期的输出将是"Connected"因为服务器已经接受了客户端,但相反,我得到的可用端口号增加了1。

为什么会发生这种情况?似乎当我在client.java文件中单击run时,我再次启动服务器而不是客户端。

sever.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 
}
}

一个有点迟来的答案,在OP已经弄清楚之后:

一个可能的原因是在IDE中错误地运行了两次服务器。第一次运行获取端口,第二次运行服务器将发现该端口已被使用并生成错误。

服务器端套接字示例:

服务器类:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class GreetServer {
private ServerSocket serverSocket;
private Socket clientSocket;
private PrintWriter out;
private BufferedReader in;
public void start(int port) throws IOException {
serverSocket = new ServerSocket(port);
clientSocket = serverSocket.accept();
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String greeting = in.readLine();
if ("hello server".equals(greeting)) {
out.println("hello client");
} else {
out.println("unrecognised greeting");
}
}
public void stop() throws IOException {
in.close();
out.close();
clientSocket.close();
serverSocket.close();
}
public static void main(String[] args) throws IOException {
GreetServer server = new GreetServer();
server.start(6666);
}
}
客户机类:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class GreetClient {
private Socket clientSocket;
private PrintWriter out;
private BufferedReader in;
public void startConnection(String ip, int port) throws IOException {
clientSocket = new Socket(ip, port);
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
}
public String sendMessage(String msg) throws IOException {
out.println(msg);
String resp = in.readLine();
return resp;
}
public void stopConnection() throws IOException {
in.close();
out.close();
clientSocket.close();
}
public static void main(String[] args) throws IOException {
GreetClient client = new GreetClient();
client.startConnection("127.0.0.1", 6666);
String response = client.sendMessage("hello server");
System.out.println("Response from server: " + response);
}
}

示例响应:

Response from server: hello client

最新更新