0

我试图让一个非常简单的Client-Server系统工作,其中Client将发送一个字符串到Serverserver然后将该字符串存储到一个文件中。

客户端通过以下方式发送字符串:

//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

我试图在服务器端对收到的字符串进行子串化,但没有运气。

有关如何处理此问题的任何指示?

4

1 回答 1

3

使用对称方法:

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)) 以亲自查看上述内容。

于 2015-02-10T07:14:20.550 回答