我正在尝试让一个非常简单的客户端-服务器
系统工作,其中客户端
将向服务器发送一个字符串
>,然后服务器
会将该字符串存储到文件中。
客户端通过以下方式发送字符串:
//Other Code
sockStrm = new DataOutputStream (clientSocket.getOutputStream ());
//Other code
sockStrm.writeChars (line);
//Other code
服务器收到字符串:
//Other code
strm = new BufferedReader (new InputStreamReader (clientSocket.getInputStream ()));
//Other code
stringLine = strm.readLine ();
//Other code
当我发送字符串STOP
时,在客户端该字符串的长度为4,在服务器端该字符串的长度为9并显示为STOP
我尝试在服务器端对接收到的字符串进行子串,但没有成功。
有关于如何处理这个问题的指导吗?
最佳答案
使用对称方法:
DataOutputStream sockStrm =...
sockStrm.writeUTF(str);
和
DataInputStream sockStrm = ...
String str = sockStrm.readUTF();
writeChars 将单个字符写入两个字节值。读者按照编码从字节序列中重构字符串,肯定不会每个字符编码都按照高字节-低字节。因此,您会得到一些零字节与原始低字节值的混合体,因此您仍然可以看到原始字符串值。 使用\x00 表示 NULL 字节:
S-T-O-P => on the line: \x00-S-\x00-T-\x00-O-\x00-P => prints as STOP
对传入字符串的字符使用循环并显示它们的整数值 (str.charAt(i)) 以亲自查看上述内容。
关于Java 服务器 - 如何从 InputStreamReader 获取输入并将其转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28425942/