2014-11-05 6 views
-1

Я создаю простое приложение Client-Server и сталкиваюсь с каким-то странным поведением при передаче сообщений через Socket: когда клиент пишет на сервер, сообщение передается правильно, однако, когда сервер отправляет ответ, в зависимости от того значение передается через сокет, кажется, чтобы получить дублируется ...Передача строки через значение Socket duplicates

Вот пример кода, что делает сервер:

. 
. 
. 
public void respond(Socket socket) 
{ 
    try 
    { 
     InputStreamReader inStream = new InputStreamReader(socket.getInputStream()); 
     PrintWriter outStream = new PrintWriter(
       new OutputStreamWriter(socket.getOutputStream(), "UTF-16")); 

     outStream.write("Message received\n"); 
     outStream.flush(); 

     . 
     . 
     . 
    } 
    catch (Exception e) { /* Do something */ } 
} 
. 
. 
. 

сервер и клиент в настоящее время работает на той же машине.

Кроме того, при записи с сервера на клиент не возникает проблемы при записи с сервера на сервер: если я укажу любую другую (или нет) кодировку, чем UTF-16 для OutputStreamWriter, клиент выиграл Невозможно правильно разобрать сообщение.

Есть ли у вас, ребята, идея, почему это может быть?

+1

Я думаю, что вы допустили ошибку, вставляя свой код, taht не компилируется (дубликаты переменных). – Dici

+0

Возможно, что ваш код на самом деле не скомпилирован и вместо этого выполняется на существующей компиляции, потому что у вас один и тот же блок кода там дважды, что приводит к ошибке повторяющейся переменной. – Zymus

+0

Sry, это произошло при вставке, я его отредактировал, по-прежнему та же проблема – pablo

ответ

0

Кодировка символов на каждом конце разговора должна быть такой же: Charset используется для кодирования с помощью InputStreamReader на клиенте должен совпадать с используемой OutputStreamWriter на сервере (и наоборот).

Если вы не укажете один, он будет использовать JVM по умолчанию.

Если вы не указали код своего клиента, то тот факт, что сервер использует по умолчанию Charset для чтения и UTF-16 для написания, заставляет меня думать, что существует потенциальное несоответствие.

+0

Я запустил код для клиента и сервера на том же компьютере, поэтому кодировка по умолчанию должна быть такой же, как я предполагаю? – pablo

+0

Я думаю, вы меня неправильно поняли (но уточните мой ответ). В 'InputStreamReader' вашего сервера (выше) не указывается' Charset', поэтому он используется по умолчанию. Если 'OutputStreamReader' на стороне клиента устанавливает его в' UTF-16', тогда будет несоответствие, если 'UTF-16' является значением по умолчанию для вашей платформы. –

Смежные вопросы