gpt4 book ai didi

java - 即使我关闭套接字也会出现 java.net.BindException

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

我是套接字编程的新手,只是尝试编写一个小程序来了解套接字的工作原理。有一个客户端和一个服务器,我只是尝试从服务器加载一些字符串并显示。但是每次我创建一个服务器套接字时,即使我手动清理了finally block 中的所有资源,我也会得到java.net.BindException。看一下下面的代码,并请建议对可能导致此问题的原因进行一些编辑。我正在使用 Eclipse。

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 AdviceServer {

String[] adviceList = {
"Take smaller bites",
"Go for the tight jeans. No they do NOT" + "make you look fat.",
"One word: inappropriate",
"Just for today, be honest. Tell your"
+ "boss what you *really* think",
"You might want to rethink that haircut." };

public void setUpServer() {

ServerSocket serverSocket = null;

try {
if (serverSocket == null)
serverSocket = new ServerSocket(8003);
int i = 2;

// Keep looping till we have clients.
while (true) {
Socket sock = serverSocket.accept();
PrintWriter pw = new PrintWriter(sock.getOutputStream());
pw.write(getRandomAdvice());
pw.close();
System.out.println(getRandomAdvice());
}

// serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

public void setUpClient() {

// Make a socket
Socket chatSocket = null;
try {
chatSocket = new Socket("127.0.0.1", 8003);
InputStreamReader isr = new InputStreamReader(
chatSocket.getInputStream());

// Make a chain stream Buffered Reader
BufferedReader br = new BufferedReader(isr);

String text;
while ((text = br.readLine()) != null) {
System.out.println(text);
}

br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (chatSocket != null) {
try {
chatSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


}

public String getRandomAdvice() {
return adviceList[(int) (Math.random() * adviceList.length)];

}

public static void main(String[] args) {
AdviceServer as = new AdviceServer();

as.setUpClient();
as.setUpServer();
}
}

任何帮助将不胜感激,因为我已经尝试了几乎所有方法来纠正这个问题。

最佳答案

您必须运行代码两次,因此会收到 BindException。与第一次运行一样,服务器将在端口 8003 上运行并监听,您将收到 ConnectionRefused错误。下次运行此程序时,当您再次运行服务器代码时,客户端将从服务器获取消息,然后是 BindException

问题是服务器和客户端运行在同一个主线程上。尝试在不同的线程中运行服务器。并且首先运行服务器,它会监听客户端的连接。

关于java - 即使我关闭套接字也会出现 java.net.BindException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26815129/

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