我有一个TCP套接字,我在Raspberry Pi上用Java打开,而远程硬件正在向它发送数据。不幸的是,呈现给控制台的数据对于sser来说是不可读的。
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数据包转换为人类可读的字符串,这是我在这里遇到的绊脚石。
答案 0 :(得分:0)
如果远程硬件正在发送二进制数据,则应使用普通的InputStream读取它:
InputStream input=connectionSocket.getInputStream();
...它对人类用户来说是不可读的。
相反,如果您确实知道它是文本,那么您必须知道它已编码的字符集,并将其设置为InputStreamReader作为第二个参数:
new InputStreamReader(connectionSocket.getInputStream(), "UTF-16")
可能的编码: