java socket 通信 connection reset问题

QQ5185149 2008-04-03 03:31:37
客户端(java)读取服务器端(C++)的数据,只能读取服务器端一次写入到流中的数据,在read就抛java.net.SocketException: Connection reset的错误,已经折磨我很长时间了,本人对C++不太了解,而且C++开发的客户端是正常的,所以我觉得我的代码肯定有问题,希望高人指点
客户端代码:
Socket socket = null;
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
socket = new Socket(SocketConfig.SERVER_IP, SocketConfig.SERVER_PORT);
socket.setSoTimeout(10000);
in = new BufferedReader(new InputStreamReader(socket.getInputStream(), SocketConfig.CHAR_ENCODING));

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


String cmd = SocketClient.genCmd(command);
System.out.println("command:::" + cmd);
out.println(cmd);
out.flush();

char[] head_char = new char[18];
in.read(head_char);
String head = new String(head_char);

//输出到控制台
System.out.print("resHead:::");
System.out.println(head);

char state = head.charAt(0);// 结果状态
char encryptType = head.charAt(1);//加密方式
int rows = Integer.parseInt(head.substring(2, 6));// 结果行数
int cols = Integer.parseInt(head.substring(6, 10));// 每行字段数
long byteCounts = Long.parseLong(head.substring(10, 18));// 结果字节数
String resultBuf = "";// 结果内容

//逐行读取结果内容
for(int i = 0; i < rows; i++){
String oneRow = in.readLine();
System.out.println(oneRow);
}

} catch (Exception e) {
e.printStackTrace();
throw new Exception(e);

} finally {
try {
if (null != out)
out.close();
if (null != in)
in.close();
if (null != socket)
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}

错误信息:
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:411)
at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:453)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:183)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.read(BufferedReader.java:157)
at com.rails.smm.cmd.SocketClient.execCmd(SocketClient.java:87)
at com.rails.smm.cmd.SocketClient.main(SocketClient.java:163)
...全文
439 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧