从客户端java读取数据时连接重置错误[重复]

Posted

技术标签:

【中文标题】从客户端java读取数据时连接重置错误[重复]【英文标题】:Connection reset error when reading data from client java [duplicate] 【发布时间】:2013-08-27 13:14:39 【问题描述】:

我正在使用 Java Socket 开发客户端-服务器应用程序。我的应用程序有服务器,它将监听端口

客户端将连接到该端口 从客户端接收数据 向客户端发送数据

我的代码的一部分

public void run() 
    System.out.println("Got a client !");
    try 
        // Get Data From Client
        int red = -1;
        byte[] buffer = new byte[5 * 1024]; // a read buffer of 5KiB
        byte[] redData;
        StringBuilder clientData = new StringBuilder();
        String redDataText;
        while ((red = clientSocket.getInputStream().read(buffer)) > -1) 

/* Get Data From Client Here Code Hidden */

            System.out.println("Data From Client :"
                    + clientData.toString());

            OutputStream out = clientSocket.getOutputStream();
            DataOutputStream dos = new DataOutputStream(out);

            String sDataToClient = "TEST DATA TO SEND IN BYTE ARRAY";

            byte[] b = sDataToClient.getBytes("UTF-8");

            byte[] bClientSend = new byte[b.length + 2];

            bClientSend[0] = (byte) 1;
            bClientSend[1] = (byte) 79;

            System.arraycopy(b, 0, bClientSend, 2, b.length);

            dos.write(bClientSend);
            System.out.println(Arrays.toString(bClientSend));

        
        clientSocket.close();
     catch (IOException e) 
        e.printStackTrace();
    

在以下行将数据发送到客户端后,我得到java.net.SocketException: Connection reset

while ((red = clientSocket.getInputStream().read(buffer)) > -1) 

我可以看到System.out.println(Arrays.toString(bClientSend));的数组内容然后出现错误

【问题讨论】:

你关闭服务器端的连接了吗?查看异常的可能原因:***.com/questions/62929/… 之前访问过的链接...是因为在向客户端发送数据后我的客户端关闭了与服务器的连接,因此我在while 循环中出现错误? 我的服务器没有关闭与客户端的连接 尝试使用 BufferedInputStream 实例并在循环条件中使用它。 只是为了确定一个更基本的套接字程序是否适合您?我的意思是这是你的第一个套接字程序吗? 【参考方案1】:

Quoting a duplicate post

有几种可能的原因。

另一端故意重置了连接,在某种程度上,我 不会在这里记录。这是罕见的,而且通常是不正确的,因为 应用软件可以做到这一点,但对于商业来说并不陌生 软件。

更常见的是,它是由写入一个连接导致另一个 end 已经正常关闭。换句话说,一个应用程序 协议错误。

在 Windows 中,“软件导致连接中止”,这是不一样的 作为“连接重置”,是由您发送的网络问题引起的 结尾。有一篇关于此的 Microsoft 知识库文章。

【讨论】:

以上是关于从客户端java读取数据时连接重置错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

nginx tomcat7 错误:-“从上游读取响应标头时,recv() 失败(104:对等连接重置)”

从上游读取响应头时失败(104:由对等方重置连接)

AWS ElasticBeanstalk NodeJS-502错误:从上游读取响应头时,recv()失败(104:对等连接重置)

http 403 错误 +“readv() 在读取上游时失败(104:对等方重置连接)”

从上游读取响应头时,Nginx uwsgi(104:由对等方重置连接)

在 docker 和 ubuntu 中从上游读取响应标头时失败(104:对等方重置连接)