我想从我的Java TCP客户端向我的Visual Basic服务器发送TCPMessage。
服务器使用BinaryReader.ReadString()函数。
http://msdn.microsoft.com/en-US/library/system.io.binaryreader.readstring.aspx
ReadString函数需要一个7比特长的字符串大小的前缀。
目前这是我的代码,但服务器无法识别该消息。
public void sendMessage(String message) {
if (out != null && !out.checkError()) {
out.print(message.length());
out.println(message);
out.flush();
}
}
我无法更改整个服务器架构,以使其识别字符串,例如来自ReadLine。
希望有人可以提供帮助,现在尝试几个小时。
答案 0 :(得分:0)
您的out
可能是PrintWriter
,可将数据转换为文字。例如,out.print()
将值的长度写为字符串,而ReadString
将字符串的长度读取为二进制数据。对于初学者,您需要将out
更改为OutputStream
(写入二进制数据)而不是PrintWriter
。另一件事是你需要确保Java编写的字符串的字符编码与BinaryReader使用的编码匹配(默认为UTF-8)。另请注意,ReadString期望字符串的长度以Write7BitEncodedInt method中描述的特殊格式进行编码。
最后,ReadString不希望换行符出现在字符串的末尾(println
隐式添加换行符。)