gpt4 book ai didi

java - 为什么会出现 SocketException?

转载 作者:行者123 更新时间:2023-12-02 00:53:34 24 4
gpt4 key购买 nike

我有客户端类和服务器类,但是当我运行两个主要方法时,什么都不会发生,当我停止运行时,会发生此异常。为什么??请帮助我,我该如何解决它???

我的客户端类:

public class Client {

static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

/**
* @param args the command line arguments
*/
public static void main(String[] args) {

try {
Socket c = new Socket("localhost", 5001);
BufferedReader read = new BufferedReader(new InputStreamReader(c.getInputStream()));
BufferedWriter write = new BufferedWriter(new OutputStreamWriter(c.getOutputStream()));
String string = reader.readLine();
write.write(string, 0, string.length());
write.newLine();
write.flush();
System.out.println(read.readLine());



} catch (Exception e) {
System.err.println(e);
}
}}

我的服务器类:

public class Server{

/**
* @param args the command line arguments
*/
public static void main(String[] args) {

ServerSocket s = null;
try {
s = new ServerSocket(5001);
System.out.println("listening...");
Socket so = s.accept();
BufferedReader read = new BufferedReader(new InputStreamReader(so.getInputStream()));
BufferedWriter write = new BufferedWriter(new OutputStreamWriter(so.getOutputStream()));
while (true) {
String string = read.readLine();
System.out.println(string);
String answer = "I got" + string + "from you!";
write.write(answer, 0, answer.length());
write.newLine();
write.flush();
}
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}

}}

服务器 cpnsole 中的堆栈跟踪:

run:


listening...
system connected
Hello

Dec 19, 2009 12:58:15 PM server.Main main
SEVERE: null
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 server.Main.main(Main.java:37)
BUILD SUCCESSFUL (total time: 9 seconds)

在客户端控制台中:

run:
Hello
I gotHellofrom you!
BUILD SUCCESSFUL (total time: 4 seconds)

最佳答案

您的客户端连接到服务器,发送一些数据,读取响应并终止。没关系。

但是您的服务器等待客户端,读取其数据,写入响应然后再次尝试从客户端读取一些数据。但客户端已经关闭了连接。因此服务器会得到您所描述的异常。

要解决此问题(在服务器端),您必须在 while 循环中执行 Socket so = s.accept();。并且不要忘记在循环结束时关闭套接字。

关于java - 为什么会出现 SocketException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1932435/

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