gpt4 book ai didi

Java 聊天室 - 为什么我收到 SocketException?

转载 作者:行者123 更新时间:2023-11-30 04:46:55 29 4
gpt4 key购买 nike

我正在使用简单的套接字连接创建一个聊天室。我有一个服务器和客户端程序。服务器在端口 225 上运行,然后当我在端口 225 上运行客户端以便它们可以读/写套接字时,客户端立即停止并显示错误消息

java.net.SocketException: Connection resetJava Result: 1

为什么会抛出这个异常?连接成功,该行被打印到控制台,如图所示:

try {
client = new Socket(serverAdress, portNumber);
System.out.println("Successful connection to server on port " + portNumber + ".");

那么为什么可能无法连接?

这是异常跟踪...

java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at schoolroom10.SchoolRoomClient.SchoolRoomClientWindow.main(SchoolRoomClientWindow.java:85)

这是我的服务器代码...

public class SchoolRoomServer {

// 'server' will create the server over the local port:
static ServerSocket serverSocket = null;

//Socket for listening:
static Socket clientcommunicate = null;

//portnum is the number of the local port. Change to required port before running.
static int portnum = 225;

public static void main(String[] args) throws IOException{
try {
serverSocket = new ServerSocket(portnum);
clientcommunicate = serverSocket.accept();
Communicate c = new Communicate(Communicate.server);
Thread t = new Thread(c);
t.start();
} catch (UnknownHostException uhe) {
System.err.println(uhe);
System.exit(1);
} catch (IOException ioe) {
System.err.println(ioe);
System.exit(1);
}


}
}

class Communicate implements Runnable {
public static Socket server;
Communicate(Socket server) {
Communicate.server = server;
}
public void run() {
String in = "";
try {
//i/o for clients:
PrintStream output = new PrintStream(server.getOutputStream());
BufferedReader input = new BufferedReader(new InputStreamReader(server.getInputStream()));
String message;

//Message handling:
while(((message = input.readLine()) != null) && (!in.equals("."))) {
output.println(message);
}
} catch (IOException ioe) {
System.err.println(ioe);
}
}
}

最佳答案

正如之前的发帖者所指出的,您应该避免使用低于 1024 的端口,因为这些端口是保留的。

在没有看到所有代码的情况下,剩下的只是猜测,但是在客户端,您应该进入一个循环,以不断准备好输入流并处理传入消息,然后在重复之前短暂暂停,例如 sleep (100)。用于监视连接请求和传入消息的同一服务器端。

如果您不继续读取输入流,它将填充缓冲区并丢弃连接并抛出异常。

关于Java 聊天室 - 为什么我收到 SocketException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10764371/

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