Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从客户端java读取数据时发生连接重置错误_Java_Sockets - Fatal编程技术网

从客户端java读取数据时发生连接重置错误

从客户端java读取数据时发生连接重置错误,java,sockets,Java,Sockets,我正在使用Java套接字开发客户机-服务器应用程序。我的应用程序有一个服务器,它将侦听端口 客户端将连接到该端口 从客户端接收数据 向客户端发送数据 我代码的一部分 public void run() { System.out.println("Got a client !"); try { // Get Data From Client int red = -1; byte[] buffer = new byte[5 * 10

我正在使用Java套接字开发客户机-服务器应用程序。我的应用程序有一个服务器,它将侦听端口

  • 客户端将连接到该端口
  • 从客户端接收数据
  • 向客户端发送数据
我代码的一部分

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))的数组内容然后发生错误

有几个可能的原因

另一端故意重设了连接,以一种我不喜欢的方式 不会在这里记录。这是罕见的,而且通常是不正确的 应用软件可以做到这一点,但商业应用并不陌生 软件

更常见的情况是,它是由写入另一个 末端已正常关闭。换句话说,就是一个应用程序 协议错误

在Windows中,“软件导致连接中止”,这是不同的 由于“连接重置”,是由于从您的 结束。有一篇关于这方面的微软知识库文章


您是否关闭了服务器端的连接?查看异常的可能原因:之前访问的链接。。。是因为在向客户端发送数据后,我的客户端关闭了与服务器的连接,因此我在
循环时出错了吗?我的服务器没有关闭与客户端的连接尝试使用BufferedInputStream实例并在循环条件下使用它。只是为了确定是否有更基本的套接字程序适用于您?我是说这是你的第一个套接字程序吗?