首页 > 编程语言 >java.net.SocketException: Connection reset

java.net.SocketException: Connection reset

时间:2024-05-14 15:54:50浏览次数:21  
标签:reset SocketException socket String bufferedWriter new net 服务端 Socket

今天在学习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();
        }

    }
}

标签:reset,SocketException,socket,String,bufferedWriter,new,net,服务端,Socket
From: https://www.cnblogs.com/dongyaotou/p/18191448

相关文章

  • 数据库升级PostgreSql+Garnet
    目录前言PostgreSql安装测试额外Nuget安装Person.cs模拟运行Navicate连postgresql解决方案Garnet为什么要选择Garnet而不是RedisRedis不再开源Windows版的Redis是由微软维护的WindowsRedis版本老旧,后续可能不再更新Garnet性能强于Redis安装测试安装可视化工具C#代码连接测试总结......
  • Wireless Network
    描述AnearthquaketakesplaceinSoutheastAsia.TheACM(AsiaCooperatedMedicalteam)havesetupawirelessnetworkwiththelapcomputers,butanunexpectedaftershock(预余震)attacked,allcomputersinthenetworkwereallbroken.Thecomputersarerepai......
  • Advanced .Net Debugging 8:线程同步
    一、介绍这是我的《Advanced.NetDebugging》这个系列的第八篇文章。这篇文章的内容是原书的第二部分的【调试实战】的第六章【同步】。我们经常写一些多线程的应用程序,写的多了,有关多线程的问题出现的也就多了,因此,最迫切的任务就是提高解决多线程同步问题的能力。这一节......
  • Kubernetes
    Kubernetes是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,方便进行声明式配置和自动化。Kubernetes拥有一个庞大且快速增长的生态系统,其服务、支持和工具的使用范围广泛。小提示:系统配置文件Linux系统启动后,默认从以下系统配置文件加载内核参数:/run/sy......
  • .NET周刊【5月第1期 2024-05-05】
    国内文章一个开源轻量级的C#代码格式化工具(支持VS和VSCode)https://www.cnblogs.com/Can-daydayup/p/18164905CSharpier是一个开源、免费的C#代码格式化工具,特点是轻量级且依赖Roslyn引擎重构代码格式。支持的IDE包括VisualStudio(2019与2022)和VisualStudioCode等。该项......
  • skynet框架:并发热点处理方案
    对于关键流程,所有请求都要求返回有效结果,如创建socket连接:functionluasocket:connect() returnsocketcore.open(self.__host,self.__port)end显然外部调用需要获取到正确的socket句柄用于数据交互,当并发调用此接口时,所有调用都需要获取到有效的句柄以保证业务正常;方案......
  • Linux上安装dotnet
    安装dotnet下载地址:https://dotnet.microsoft.com/zh-cn/download/dotnet选择.NET7.0选择SDK7.0.408的Linux版本的x64版本https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/sdk-7.0.408-linux-x64-binaries打开压缩包所在文件夹,在压缩包所在文件......
  • 变频器通过Modbus转Profinet网关接电机与PLC通讯在自动化的应用
    Modbus转Profinet网关(XD-MDPN100/300/600)的作用是将Modbus协议转换为Profinet协议,支持ModbusRTU主站/从站,并且Modbus转Profinet网关设备自带网口和串口,既可以实现协议转换的同时,也可以实现接口的转换。通过Modbus转Profinet网关使变频器可以与PLC进行实时通信,接收PLC的控制信号并......
  • 云原生周刊:Kubernetes Grafana 看板更新 | 2024.5.13
    开源项目推荐ChartTestingChartTesting是用于测试Helm图表的工具。它旨在用于对拉取请求进行lint和测试。它会自动检测针对目标分支更改的图表。ClusterpediaClusterpedia是一个多集群的百科全书,用于同步、搜索和简单控制多集群资源。Clusterpedia可以与多个集群同......
  • Net8 webAPI 创建(傻瓜式入门)
    前沿学不止境(还是用windows学习吧mac太不友好了)让我来新建个Net8webapicore 然后看到这个页面选择不适用顶级语句然后配置你的目录  然后打开vsstudio看到编辑页面 可以在controllers里面创建新的.cs请求比如我新建了firstController  写入ge......