java 连接重置错误

java Connection reset error

我是 Java 的新手。如果您认为这是一个非常基本的问题,请原谅 question.There 堆栈溢出中已经有很多关于此的答案,我几乎遍历了堆栈溢出和其他一些论坛中可以获得的几乎所有可能的帮助。不幸的是 none 他们帮助了我。

我有一个 client/server 程序,其中客户端向服务器发送一个字符串,服务器只是将另一个字符串附加到客户端发送的字符串并将其发送回客户端。

服务器程序如下所示。

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class server {

    public static void main(String[] args) {

        try
        {
            ServerSocket server = new ServerSocket(7300);
            Socket s = server.accept();
            DataInputStream inp = new DataInputStream(s.getInputStream());
            DataOutputStream out = new DataOutputStream(s.getOutputStream());
            String str =inp.readUTF();
            str = str+"  buddy!";
            out.writeUTF(str);



        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

    }

}

客户看起来像这样。

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.*;

public class client {

    public static void main(String[] args) {
        try
        {
            Socket s = new Socket("192.168.1.3",7300);
            DataInputStream inp = new DataInputStream(s.getInputStream());
            DataOutputStream out = new DataOutputStream(s.getOutputStream());

            out.writeUTF("hi");
            System.out.println(inp.readUTF());
            Thread.sleep(2000);
            out.writeUTF("hello");
            System.out.println(inp.readUTF());


        }

        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

}

客户端写入 "hi" 时一切正常,当客户端开始发送 "hello" 时我收到连接重置错误。我没有弄错我在做什么,请帮助我解决这个问题。

我得到的带有错误的输出看起来像这样。

hi  buddy!
java.net.SocketException: Connection reset by peer: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(Unknown Source)
    at java.net.SocketOutputStream.write(Unknown Source)
    at java.io.DataOutputStream.write(Unknown Source)
    at java.io.DataOutputStream.writeUTF(Unknown Source)
    at java.io.DataOutputStream.writeUTF(Unknown Source)
    at sokry.client.main(client.java:18)

在您的服务器示例中,readUTF 仅在 DataInputStream 上调用一次,即使客户端向 DataOutputStream 写入了两次。因此,只需添加

str = inp.readUTF();
str = str + "  buddy!";
out.writeUTF(str);

以你的服务器为例,上次out.writeUTF(str)后,将解决你的问题。

对 client.java 文件的以下行发表评论,try.it 将起作用

Thread.sleep(2000); `//out.writeUTF("hello");; //System.out.println(inp.readUTF()); 因为当您从客户端向服务器发送 "hi" 并且服务器给出回复然后它完成工作并停止连接但是在 client.java 中您向服务器发送另一个请求但服务器处于静止状态。

你应该启动服务器直到客户端完成它的工作..

希望它会等待