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编写的客户端正常工作。

知道为什么会这样吗?

最佳答案

服务器中存在错误。它在响应字符串中发回一部分请求字符串。可能是终止响应为null,并且您应该寻找null并忽略传递给它的所有内容,大概C客户端会这样做,但是服务器首先不应该发送任何多余的信息。

换句话说,服务器可能使用sizeof buffer作为send(),的长度参数,而不是strlen(buffer)strlen(buffer)+1(如果结尾的null是协议的一部分)。这一切似乎定义不清。

无论如何,对未以行结尾的数据使用readLine()都是不正确的。

07-24 09:46
查看更多