Передача строки через сокет дублирует значение
Я создаю простое приложение клиент-сервер и сталкиваюсь со странным поведением при передаче сообщений через сокет: когда клиент пишет на сервер, сообщение передается правильно, однако, когда сервер отправляет ответ, какое бы значение не отправлялось через сокет похоже дублируется...
Вот пример кода того, что делает сервер:
.
.
.
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 */ }
}
.
.
.
Сервер и Клиент в настоящее время работают на одной машине.
Кроме того, кажется, что при записи с клиента на сервер кодирование не является проблемой, но при записи с сервера на клиент происходит следующее: если для OutputStreamWriter указать любую другую (или нет) кодировку, кроме UTF-16, клиент не сможет правильно разобрать сообщение.
У кого-нибудь из вас есть идея, почему это может быть?
1 ответ
Кодировка символов на каждом конце разговора должна быть одинаковой: Charset
используется для кодирования InputStreamReader
на клиенте должны совпадать с используемыми OutputStreamWriter
на сервере (и наоборот).
Если вы не укажете один из них, он будет использовать JVM по умолчанию.
Когда вы не предоставили код своего клиента, тот факт, что сервер использует по умолчанию Charset
читать и UTF-16
писать заставляет меня думать, что есть потенциальное несоответствие.