【问题标题】:I get socket exception (connection reset ) on client side whenever I try to read data form the server每当我尝试从服务器读取数据时,我都会在客户端收到套接字异常(连接重置)
【发布时间】:2021-09-24 20:40:05
【问题描述】:

当我第一次运行下面代码的代码时,它运行得很好 然后我尝试添加更多代码(例如在服务器端创建缓冲输入流并尝试从客户端读取)并再次运行它,它在客户端给了我这个异常

Exception in thread "main" java.net.SocketException: Connection reset
        at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:323)
        at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350)
        at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803)
        at java.base/java.net.Socket$SocketInputStream.read(Socket.java:976)
        at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297)
        at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)
        at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188)
        at java.base/java.io.InputStreamReader.read(InputStreamReader.java:178)
        at java.base/java.io.BufferedReader.fill(BufferedReader.java:161)
        at java.base/java.io.BufferedReader.readLine(BufferedReader.java:329)
        at java.base/java.io.BufferedReader.readLine(BufferedReader.java:396)
        at client.main(client.java:20)

当我删除添加的代码并仅在客户端使用阅读器运行它时,它仍然无法工作 除非我从客户端删除输入流,否则它不会工作 这是服务器端

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class server
 {
    public static void main(String[] args) throws Exception {
        ServerSocket server = new ServerSocket(8080);
        Socket client = server.accept();
                  PrintWriter out= new PrintWriter(client.getOutputStream(),true);
                  out.write("dfdawdadwawdw");
         
           }
                        
    }

这是客户端

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.StringReader;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

import jdk.internal.jshell.tool.resources.l10n;

public class client {
    public static void main(String[] args) throws Exception {
                Socket java = new Socket("localhost",8080);
             InputStreamReader in = new InputStreamReader(java.getInputStream());
             BufferedReader bufferedreader = new BufferedReader(in);
            System.out.println(bufferedreader.readLine());
               }
 
    }

【问题讨论】:

  • 您认为out.write("dfdawdadwawdw"); 之后您的服务器会发生什么?
  • 服务器刚刚关闭,没有任何问题
  • 服务器在没有 1) 刷新 printwriter 流或 2) 关闭任何流或套接字的情况下退出。
  • PrintWriter docs say ...与 PrintStream 类不同,如果启用了自动刷新,则只有在调用 println、printf 或 format 方法之一时才会执行...。请注意,write() 不是列出的自动刷新的方法之一。
  • 成功了,谢谢你的解释:) :)

标签: java sockets io-socket


【解决方案1】:

在服务器代码中尝试out.println 而不是out.write

// Server side code

import java.io.*
import java.net.*

public class server () {

    public static void main(String[] args) {
        ServerSocket server = new ServerSocket(8080);
        Socket client = server.accept();
        PrintWriter out= new PrintWriter(client.getOutputStream(),true);
        out.println("dfdawdadwawdw");
    }

}

这对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    相关资源
    最近更新 更多