Невозможно читать и писать между Java Socket/Client

Я пытаюсь установить соединение между сервером и клиентом на Java, используя java.net. Мне удается подключиться, но не отправить никаких данных. Я вставил код и результаты:

Код сервера:

ServerSocket welcomeSocket = new ServerSocket(999);
Socket connectionSocket = welcomeSocket.accept();
System.out.println("Connected to: " + connectionSocket.toString());
DataOutputStream outToClient = newDataOutputStream(connectionSocket.getOutputStream());
outToClient.writeBytes("Testing connection");

Код клиента:

Socket clientSocket = new Socket("130.236.248.52", 999);
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
modifiedSentence = inFromServer.readLine();
System.out.println("[From server:] " + modifiedSentence);

Выход сервера: подключен к: Socket[addr=/130.236.248.54,port=51535,localport=999]

Вывод клиента:


person Mattias    schedule 06.04.2013    source источник
comment
Вы пытались закрыть connectionSocket после записи клиенту?   -  person david    schedule 06.04.2013
comment
Да, у меня есть clientSocket.close(); после println в клиентском коде   -  person Mattias    schedule 06.04.2013
comment
Я имею в виду на сервере connectionSocket.close() после outToClient.writeBytes("Testing connection");   -  person david    schedule 06.04.2013
comment
Да, у меня также есть welcomeSocket.close(); после оператора записи.   -  person Mattias    schedule 06.04.2013
comment
Нет, вам нужно закрыть connectionSocket, чтобы прервать связь с клиентом. Закрытие welcomeSocket просто останавливает сервер от прослушивания любых новых подключений.   -  person Nathaniel Waisbrot    schedule 06.04.2013


Ответы (2)


  1. Используйте BufferedWriter для записи текста (так же, как вы используете BufferedReader для чтения текста)
  2. Вызовите flush() на вашем устройстве записи, чтобы заставить вывод пройти
  3. Если вы вызываете readLine() на стороне клиента, для чтения должен быть конец строки.
    BufferedWriter outToClient = new BufferedWriter(new OutputStreamWriter(connectionSocket.getOutputStream()));
    outToClient.write("Testing connection");
    outToClient.newLine();
    outToClient.flush();
person Nathaniel Waisbrot    schedule 06.04.2013
comment
Новая строка может не понадобиться для последней строки, отправленной сервером перед закрытием соединения. - person david; 06.04.2013
comment
Теперь работает, большое спасибо :) - person Mattias; 06.04.2013

Вы читаете строки, но не пишете строки. Вам нужно либо добавить признак конца строки, либо использовать один из классов, который экспортирует метод println(), и вызвать его.

person user207421    schedule 06.04.2013