我有一个将在java中发送数据的类,服务器需要一定的字符串来实际工作。
我发送的是正确的字符串,这是连接和发送过程:
// CONNECT
try {
// GET SERVER IP
InetAddress serverAddr = InetAddress.getByName(this.terminalIp);
// CREATE SOCKET
Socket hcmSocket = new Socket(serverAddr,this.terminalPort);
PrintWriter sendingStream = new PrintWriter(new BufferedWriter(new OutputStreamWriter(hcmSocket.getOutputStream())), true);
BufferedReader recivingStream = new BufferedReader(new InputStreamReader(hcmSocket.getInputStream()));
// SEND REQUEST
sendingStream.println("00 0012552 003365 004152");
服务器拒绝这个,即使它是正确的。
当我跟踪wireshark的连接时,我发现正在发送的十字架正在添加额外的0x000a
Line Feed
。
我的问题是我不希望发送它,我确保我发送的字符串在末尾没有额外的空格来创建它。
这是我要发送的Hex:30 30 1c 30 30 31 31 30 30 30 1c 30 30 33 32 35 32 1c 30 30 34 31 32 35 31
但实际发送的内容是:30 30 1c 30 30 31 31 30 30 30 1c 30 30 33 32 35 32 1c 30 30 34 31 32 35 31 0a
可能是sendingStream
自动添加吗?
答案 0 :(得分:3)
我的问题是我不希望发送它,我确保我发送的字符串在最后没有额外的空格来创建它。
不,你不是。
看看你的代码:
sendingStream.println("00 0012552 003365 004152");
来自PrintWriter.println(String)
的文档:
打印字符串然后终止该行。此方法的行为就像调用
print(String)
然后调用println()
。
这就是为什么你要获得行终结者 - 你要求它。
如果您不想要,请拨打print
而不是println
。理想情况下,完全摆脱PrintWriter
,因为它会隐藏您的异常。只需使用BufferedWriter
即可。 (我明确地亲自指定了charset,尽管我知道在Android上默认为UTF-8是合理的......)