【问题标题】:Getting error "java.net.SocketException: Connection reset"收到错误“java.net.SocketException:连接重置”
【发布时间】:2017-09-10 09:40:10
【问题描述】:

我正在学习 Java 中的套接字编程。我收到java.net.SocketException: Connection reset

客户端代码

    package com.socket;

    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.Socket;

    public class ClientSock {

        public static void main(String[] args) throws Exception {

            Socket skt = new Socket("localhost", 8888);     
            String str = "Hello Server";
            OutputStreamWriter osw = new OutputStreamWriter(skt.getOutputStream()); 

            PrintWriter out = new PrintWriter(osw);
            osw.write(str);
            osw.flush();        
        }
    }

//Server Side Code:

    package com.socket;

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.ServerSocket;
    import java.net.Socket;

    public class ServerSock {

        public static void main(String[] args) throws Exception {

            System.out.println("Server is Started");
            ServerSocket ss = new ServerSocket(8888);

            Socket s = ss.accept();

            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String str = br.readLine();

            System.out.println("Client Says : " + str);         
        }
    }

这是我运行客户端代码后的控制台,我正在重置异常连接,我做错了什么?

 Server is Started
Exception in thread "main" java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
    at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
    at sun.nio.cs.StreamDecoder.read(Unknown Source)
    at java.io.InputStreamReader.read(Unknown Source)
    at java.io.BufferedReader.fill(Unknown Source)
    at java.io.BufferedReader.readLine(Unknown Source)
    at java.io.BufferedReader.readLine(Unknown Source)
    at com.socket.ServerSock.main(ServerSock.java:19)

【问题讨论】:

标签: java sockets


【解决方案1】:

“线程“main”java.net.SocketException: Connection reset 中的异常是在对方没有调用close()的情况下被强行终止时发生的错误。

将此行添加到 ClientSock

skt.close();

我也向 ServerSock 推荐这个。

ss.close();

java.io.Closeable 实现对象必须调用close()。

【讨论】:

  • skt.close 将删除异常,但不会删除异常的根本原因。 SocektException 可能有多种情况
  • 是的,异常消失了!!!我关闭了 Socket 和 ServerSocket。非常感谢@Seongmin Gwon 和 Vineet Kasat。
【解决方案2】:

您在“Hello Server”中忘记了“\n”。
阅读器无法获取完整行并引发此异常。

【讨论】:

    猜你喜欢
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2010-09-08
    • 2021-03-10
    相关资源
    最近更新 更多