java socket 线程connection reset异常,创建线程不能读客户端的内容。急啊,详见代码。

2025-03-26 06:59:50
推荐回答(4个)
回答1:

/****
异常解释: 主要报的是一个 Connection reset :连接重置异常
导致此异常的原因是 客户断的连接断开了,也就是说
当服务端要从客户端读取数据的时候,客服端就断开连接了,当然就会报异常了。

*/

////////////////////////Server.java 代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(9528);
System.out.println("服务器启动成功...等待连接>>>>");
Socket so = server.accept();
System.out.println("获取一连接....");
/*
* 服务端在读取客户端数据的时候,
* 当客户端关闭连接,就会报Connection reset:连接重置异常
*
* 所以这时候不能让客户端的程序结束...
*
*/

InputStream in = so.getInputStream();
InputStreamReader inR = new InputStreamReader(in);
BufferedReader inbf = new BufferedReader(inR);

String cmd = inbf.readLine();
System.out.print(cmd);
if (cmd.equals("1")) {
NewThread thd = new NewThread(so);
thd.start();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}

////////////////NewThread.java 代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class NewThread extends Thread {

private Socket sct;
private String cmd;
private String a;

public NewThread(Socket s) {
sct = s;
try {
while(true){////////////////////////
InputStream in = sct.getInputStream();
InputStreamReader inR = new InputStreamReader(in);
BufferedReader inbf = new BufferedReader(inR);
cmd = inbf.readLine();
a = inbf.readLine();
}////////////////////////////////////
} catch (IOException e1) {
e1.printStackTrace();
} finally {
try {
sct.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}

public void run() {
System.out.print(cmd);
System.out.print(a);
}
}

// ///////////////////Client 代码:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
public static void main(String []args){
String s="abc";
try{
Socket socket=new Socket("localhost",9528);
System.out.println("服务器连接成功》。。。。");
OutputStream out = socket.getOutputStream();

InputStream in = socket.getInputStream();/////////////

String str = "1\n" + s;
System.out.print(str);
out.write(str.getBytes());

////////////
while(true){
in.read();
}
////////////

} catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
}
}
}

回答2:

in = new BufferedReader(new InputStreamReader(s
.getInputStream()));

out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream())), true);

代码已经修改好了,百度犯什么抽,不让传。。

回答3:

是服务器端和客户端连接的原因,所以检查一下连接。

回答4:

dfdfdffdfdsfdfdfd