Java Tcp套接字发送额外数据?

时间:2016-01-18 17:09:42

标签: java android sockets tcp

我有一个将在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自动添加吗?

1 个答案:

答案 0 :(得分:3)

  

我的问题是我不希望发送它,我确保我发送的字符串在最后没有额外的空格来创建它。

不,你不是。

看看你的代码:

sendingStream.println("00 0012552 003365 004152");

来自PrintWriter.println(String)的文档:

  

打印字符串然后终止该行。此方法的行为就像调用print(String)然后调用println()

这就是为什么你要获得行终结者 - 你要求它

如果您不想要,请拨打print而不是println。理想情况下,完全摆脱PrintWriter,因为它会隐藏您的异常。只需使用BufferedWriter即可。 (我明确地亲自指定了charset,尽管我知道在Android上默认为UTF-8是合理的......)