Подключение к сокету Java - PullRequest
4 голосов
/ 16 декабря 2011

Я пытался проверить сокетное соединение в Java, но не смог. Вот мой код (два простых приложения, сервер и клиент):

public class TestServer {

public static void main(String args[]) throws IOException {
    ServerSocket serverSocket = new ServerSocket(1111);
    System.out.println("Server socket created");
    Socket socket = serverSocket.accept();
    System.out.println("Socket accepted");
    PrintWriter output =  new PrintWriter(socket.getOutputStream(), true);
    System.out.println("Output created");
    output.write("Output string");
    socket.close();
    serverSocket.close();       
}
}

public class TestClient {

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

    Socket socket = new Socket("127.0.0.1", 1111);
    BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    System.out.println("Input: " + input.readLine());
    socket.close();

}

}

Вывод (после запуска сервера и, после него, клиента):

Server socket created
Socket accepted
Output created
Input: null

Понятия не имею, в чем проблема и почему клиент не получил отправленную ей строку. Буду признателен за любую помощь.

Ответы [ 4 ]

6 голосов
/ 16 декабря 2011

Обычно, когда я использую классы, такие как PrintWriter или OutputStream, мне нужно очищать их содержимое для отправки данных через сокет или записи в файл.

2 голосов
/ 17 декабря 2011

В дополнение ко всем другим комментариям, вы не должны закрывать сам сокет, вы должны закрыть самый внешний выходной поток, который вы создали вокруг выходного потока сокета.Это будет:

(a) очистить выходной поток (b) закрыть его (c) закрыть входной поток и (d) закрыть сокет.

2 голосов
/ 16 декабря 2011

input.readLine ожидает новой строки во входной строке. Попробуйте заменить output.write на output.println.

Я только что проверил это сейчас, и оно должно работать правильно, как это.

1 голос
/ 16 декабря 2011
//Put the line 

output.flush();

//in the end of the TestServer.java

//and in the TestClient.java I have used the code as given below

Socket socket = new Socket("127.0.0.1", 1111);
    BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    String str;
    while((str=input.readLine())!=null){
        System.out.println("Input: " + str);
    }
    socket.close();

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...