Передача строки через сокет дублирует значение

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

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

.
.
.
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 писать заставляет меня думать, что есть потенциальное несоответствие.

Другие вопросы по тегам