Ошибка сброса подключения java

Я новичок в Java. Пожалуйста, извините меня, если вы найдете это очень простым вопросом. В переполнении стека уже есть много ответов по этому поводу, и я прошел почти все возможные подсказки, которые я могу получить в переполнении стека, а также на некоторых других форумах. К сожалению, ни один из них мне не помог.

У меня есть программа клиент / сервер, в которой клиент отправляет строку на сервер, а сервер просто присоединяет другую строку к строке, отправленной клиентом, и отправляет ее обратно клиенту.

Серверная программа выглядит так.

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  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)

person Chiyaan Suraj    schedule 16.01.2015    source источник


Ответы (2)


В вашем примере с сервером readUTF вызывается только один раз на DataInputStream, даже если клиент дважды писал в DataOutputStream. Таким образом, просто добавляя

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

к вашему примеру сервера, после последнего out.writeUTF(str), решит вашу проблему.

person Ian2thedv    schedule 16.01.2015

прокомментируйте следующую строку вашего файла client.java и попробуйте. он будет работать

Thread.sleep(2000); `//out.writeUTF("hello") ;; //System.out.println (inp.readUTF ()); потому что, когда вы отправляете «привет» от клиента к серверу, и сервер дает ответ, он завершил свою работу и остановил соединение, но в client.java вы отправляете другой запрос на сервер, но сервер находится в состоянии покоя.

вы должны запустить сервер, пока клиент не закончит его работу.

надеюсь, это подождет

person maq webster    schedule 16.01.2015