gpt4 book ai didi

java.net.BindException 如何清除套接字或导致它的原因?

转载 作者:行者123 更新时间:2023-11-29 05:41:24 24 4
gpt4 key购买 nike

我需要一些帮助,我想我遇到了一个简单的网络相关问题。通过了解没有被 .close() 处理的内容,它也将帮助我更好地理解所有这些是如何工作的。我敢肯定这很简单,但对我来说这一切都是全新的。这是客户端程序。如果我能解决这个问题,那么我很可能可以附加服务器。谢谢

    public class Server {
public static void main(String[] args) {
start();
}

static int start = 0;

public static void start() {
try {
ServerSocket serverSocket = new ServerSocket(4567);
Socket socket = serverSocket.accept();
//1) Take and echo input (In this case a message)
BufferedReader bf = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String message = bf.readLine();
System.out.println("Message recieved from Client:" + message);
//2) Response of client message
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
printWriter.println("Server echoing back the message ' " + message + " ' from Client");
} catch (IOException e) {
System.out.println("e " + e);
System.exit(-1);
}
start++;

clearUp();

if (start < 5) {
System.out.println("Closing binds and Restarting" + start);

start();
}
}

public void clearUp(){
//How would I clear the stuff that is left bound
so I can restart via start() and avoid the
java.net.BindException: Address already in use: JVM_Bind ?
}

}

我如何清除绑定(bind)的内容,以便我可以通过 start() 重新启动并避免 java.net.BindException: Address already in use: JVM_Bind ?

最佳答案

问题出在这些行中。

public static void start() {
try {
ServerSocket serverSocket = new ServerSocket(4567);
//tells server to listen on 4567
....

if (start < 5) {
System.out.println("Closing binds and Restarting" + start);

start();
}

您一遍又一遍地调用 start,并告诉 ServerSocket 监听同一个端口。

相反,您要做的是拥有一个 ServerSocket,由服务器持有以进行监听。然后一个常规的 Socket 连接到 ServerSocket,服务器 接受 连接,这将返回一个新的 Socket 供它们进行通信。您的问题似乎表明这是客户端代码,传统客户端不应该有 ServerSocket,因为它没有在某些端口上监听。

你想做的是服务器:

  1. 在某个端口上创建服务器套接字。在内部循环。
  2. 等待客户端连接
  3. 接受连接。这将导致为您和客户端创建一个新的套接字以进行通信

客户:

  1. 连接到服务器套接字
  2. 通过套接字与它对话。

如果这没有意义,我可以给出一些代码示例。

请注意,为了让您的服务器与多个客户端通信,您需要使用线程。

关于java.net.BindException 如何清除套接字或导致它的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17437116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com