java.net.SocketException: Connection reset

今天在学习socket编程的时候遇到了一个bug:java.net.SocketException: Connection reset

先来看一下自己的代码:

服务端:

public class ServerSocketDemo {
    public static void main(String[] args) {

        try {
            // 建立一个ServerSocket
            ServerSocket serversocket = new ServerSocket(9999);
            //等待连接
            Socket socket = serversocket.accept();

            //读取数据
            InputStream inputStream = socket.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

            String str = bufferedReader.readLine();

            System.out.println(str);

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

    }


}

客户端:

public class ClientSocketDemo {
    public static void main(String[] args) {

        try {
            //建立Socket,指定服务端的ip地址和端口号
            Socket socket = new Socket("127.0.0.1", 9999);

            //往服务端发送数据
            OutputStream outputStream = socket.getOutputStream();
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
            BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
            String str = "你好,这是第一个socket程序";
            bufferedWriter.write(str);
            bufferedWriter.flush();

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

    }
}

先运行服务端,再紧接着运行客户端,客户端代码执行完毕后,然后查看服务端控制台,报错:java.net.SocketException: Connection reset。

错误的原因是,客户端代码没有进行关闭操作,加上这段代码就好了。

socket.shutdownOutput();

public class ClientSocketDemo {
    public static void main(String[] args) {

        try {
            //建立Socket,指定服务端的ip地址和端口号
            Socket socket = new Socket("127.0.0.1", 9999);

            //往服务端发送数据
            OutputStream outputStream = socket.getOutputStream();
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
            BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
            String str = "你好,这是第一个socket程序";
            bufferedWriter.write(str);
            bufferedWriter.flush();
            // 挂断电话,断开连接
            // 一定要加上这段代码才行。关闭socket连接。
            socket.shutdownOutput();

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

    }
}

posted on   ~码铃薯~  阅读(738)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2023-05-14 进程资源简化

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示