【问题标题】:Getting java.net.SocketException: Connection reset [duplicate]获取 java.net.SocketException:连接重置 [重复]
【发布时间】:2016-08-27 03:19:12
【问题描述】:

我正在尝试执行一个简单的客户端/服务器程序。但每当我尝试执行时,我都会收到 "java.net.SocketException: Connection reset" 。为什么会发生此异常?对我有什么建议吗?

这里是代码

SocServer.java

public static void main(String[] args) throws Exception
{
    System.out.println("Server is started");

    ServerSocket ss = new ServerSocket(8886);

    System.out.println("Server is waiting for client request");

    Socket s = ss.accept();

    System.out.println("Client Connected");

    BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));

    String str = br.readLine();

    System.out.println("Client Data" + str);

}

SocketClient.java

public static void main(String[] args) throws Exception 
{
    String ip = "localhost";
    int port = 8886;
    Socket s = new Socket(ip,port);

    String str = "Noman";

    OutputStreamWriter os = new OutputStreamWriter(s.getOutputStream());
    PrintWriter out = new PrintWriter(os);

    os.write(str);
    os.flush();
}

【问题讨论】:

  • 2 件事:1)您假设所有数据都存在并在 1SocServer.java 中的 readLine 上进行说明,并且 2)您永远不会关闭任何流。请查看:stackoverflow.com/questions/62929/…
  • 当侦听器希望取消阻止时,您不会发送换行符。在完全未使用的 PrintWriter 之外(我不鼓励使用它......最好按照预期明确发送换行符)。首先尝试String str = "Noman\n"

标签: java sockets exception socketexception


【解决方案1】:

可能的原因

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

.

  • 更常见的是,它是由写入连接导致的 end 已经正常关闭。换句话说,一个应用程序 协议错误。
  • 也可能是有未读数据时关闭套接字引起的 在套接字接收缓冲区中。
  • 在 Windows 中,“软件导致连接中止”,这是不一样的 作为“连接重置”,是由发送的网络问题引起的 你的结局。有一篇关于此的 Microsoft 知识库文章。

【讨论】:

    猜你喜欢
    • 2018-10-07
    • 2010-09-08
    • 2021-03-10
    • 2013-01-12
    相关资源
    最近更新 更多