通过Socket传递字符串重复值

时间:2014-11-05 17:21:12

标签: java sockets printwriter

我正在创建一个简单的客户端 - 服务器应用程序,并在通过套接字传递消息时面临一些奇怪的行为:当客户端写入服务器时,消息正确传递,但是当服务器发送响应时,无论发送哪个值通过套接字似乎得到重复......

以下是服务器执行操作的示例代码:

.
.
.
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 个答案:

答案 0 :(得分:0)

对话每端的字符编码必须相同:客户端Charset用于编码的InputStreamReader必须与服务器上OutputStreamWriter使用的Charset匹配(反之亦然)。

如果您没有指定一个,它将使用JVM的默认值。

当您未提供客户端代码时,服务器使用默认UTF-16进行阅读并{{1}}进行编写这一事实让我觉得可能存在不匹配。