Java TCP客户端在接收时打印额外的字符

时间:2014-09-19 01:50:58

标签: java c tcp bufferedreader

String buffer = argv[1] + " " + argv[2] + " " + argv[3];
Socket sock = new Socket(ip, port);
DataOutputStream send = new DataOutputStream(sock.getOutputStream());
BufferedReader recv = new BufferedReader(new InputStreamReader(sock.getInputStream()));
send.writeBytes(buffer + '\n');

String result = recv.readLine();
System.out.println("From Server: " + result);
sock.close();

我有一个java TCP 客户端连接到用 C 编写的服务器。客户端告诉服务器乘以/添加两个数字,服务器发送结果。出于某种原因,当我调用readLine()时,它会返回从服务器发送的字符串以及缓冲区的一部分。

例如,我发送服务器“乘以10 10”,服务器发回“100”,客户端打印100tiply1010。我已经检查过服务器没有问题,并且用 C 编写的客户端可以正常工作。

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

服务器中存在错误。它将在响应字符串中发回部分请求字符串。可能它是null终止响应并且您期望查找null并忽略它之后的所有内容,并且可能是C客户端执行此操作,但服务器不应该在第一次发送任何额外内容的地方。

换句话说,如果尾随空是协议的一部分,则服务器可能使用sizeof buffer作为send(),的长度参数而不是strlen(buffer)或可能strlen(buffer)+1。这一切看起来都很糟糕。

在任何情况下,对未被线路终止的数据使用readLine()都不正确。