针对java.net.SocketException: Connection reset的问题排查

最近在与第三方系统对接接口时,需要用到   socket 这种方式,在调试过程中,一直出现java.net.SocketException: Connection reset  这个错误

我的客户端代码

import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;

public class ClientDemo1 {
    public static void main(String[] args) throws IOException {
        System.out.println("客户端启动");
//      1、创建客户端连接服务端的通道
        Socket socket = new Socket("127.0.0.1",7777);
//      2、从socket获取一个字节输出流
        OutputStream os = socket.getOutputStream();
//      3、将字节输出流转成更高级的打印流
        PrintStream ps = new PrintStream(os);
//      4、发送信息
        ps.print("我是一棵快乐的韭菜");
        System.out.println("发送成功");
        ps.flush();
        }
}

服务端代码

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class ServiceDemo1 {
    public static void main(String[] args) {
        System.out.println("服务端启动");
        try {
//          1、创建服务端对象
            ServerSocket serverSocket = new ServerSocket(7777);
//          2、调用accept方法,等待客户端的Socket连接请求,建立Socket通信
            Socket socket = serverSocket.accept();
//          3、从socket获取一个字符输入流
            InputStream is = socket.getInputStream();
//          4、将字节输入流 转成 更高级的 字符缓冲输入流
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String msg;
            if((msg = br.readLine()) != null){
                System.out.println(msg);
            }


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

    }
}

错误提示

 

原因:

 服务端读取客户端发送的数据的代码 br.readLine()读取的是一行的代码,而客户端发送数据的代 码 ps.print("我是一棵快乐的韭菜")  发送的不是一行的代码,因为结尾没有换行符

修改:

 ps.print("我是一棵快乐的韭菜")  修改成 ps.println("我是一棵快乐的韭菜")

 


版权声明:本文为ll6677_原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。