我正在创建一个简单的客户端 - 服务器应用程序,并在通过套接字传递消息时面临一些奇怪的行为:当客户端写入服务器时,消息正确传递,但是当服务器发送响应时,无论发送哪个值通过套接字似乎得到重复......
以下是服务器执行操作的示例代码:
.
.
.
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之外的任何其他(或没有)编码,则客户端赢了“能够正确解析消息。
你们其中任何人都知道为什么会这样吗?
答案 0 :(得分:0)
对话每端的字符编码必须相同:客户端Charset
用于编码的InputStreamReader
必须与服务器上OutputStreamWriter
使用的Charset
匹配(反之亦然)。
如果您没有指定一个,它将使用JVM的默认值。
当您未提供客户端代码时,服务器使用默认UTF-16
进行阅读并{{1}}进行编写这一事实让我觉得可能存在不匹配。