Java TCP Socket - 人类可读输出

时间:2015-11-07 17:41:59

标签: java sockets tcp raspberry-pi

我有一个TCP套接字,我在Raspberry Pi上用Java打开,而远程硬件正在向它发送数据。不幸的是,呈现给控制台的数据对于sser来说是不可读的。

Data at the Console

Java代码如下:

import java.io.*;
import java.net.*;
class TCPServer {
    public static void main(String argv[]) throws Exception       {
        String clientSentence;
        String capitalizedSentence;
        ServerSocket welcomeSocket = new ServerSocket(11111);
        while(true)          {
            Socket connectionSocket = welcomeSocket.accept();
            BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));

            DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
            clientSentence = inFromClient.readLine();

            System.out.println("Received: " + clientSentence);

            capitalizedSentence = clientSentence.toUpperCase() + '\n';

            outToClient.writeBytes(capitalizedSentence);
        }
    }
}

我已经检查过tcpdump和硬件本身,数据正在由Raspberry Pi发送和接收。我的预感就是这条线:

clientSentence = inFromClient.readLine();

最终要求是获取正在发送的数据并将其转储到SQL表中,因此我需要将TCP数据包转换为人类可读的字符串,这是我在这里遇到的绊脚石。

1 个答案:

答案 0 :(得分:0)

如果远程硬件正在发送二进制数据,则应使用普通的InputStream读取它:

InputStream input=connectionSocket.getInputStream();

...它对人类用户来说是不可读的。

相反,如果您确实知道它是文本,那么您必须知道它已编码的字符集,并将其设置为InputStreamReader作为第二个参数:

new InputStreamReader(connectionSocket.getInputStream(), "UTF-16")

可能的编码:

  • ASCII
  • UTF-8
  • UTF-16
  • ISO-8859-1
  • ISO-8859-2
  • BIG-5(中文)