[英]Data not displayed correctly when read from TCP socket Java
我是 Java 套接字和進程的新手。 我正在嘗試從 TCP 套接字讀取信息,但是當我收到數據時,有些信息沒有正確顯示。 (我認為這可能是一個編碼問題,我正在讀取的進程是一個 Genivi DLT 守護進程)。
這是我的代碼示例:
try (Socket socket = new Socket(hostname, port)) {
InputStream input = socket.getInputStream();
InputStreamReader reader = new InputStreamReader(input);
BufferedReader br1 = new BufferedReader(reader);
String line;
while((line = br1.readLine())!=null) {
String s = br1.readLine();
byte[] utf8Bytes = s.getBytes("UTF-8");
if(s.contains("SYS"))
System.out.println(s);
}
這是應該如何顯示數據的照片。
這是它實際顯示到控制台的方式:
ÒWAVAè5ÓrQSYS ² (PathologyCollectorCPU.cpp: getLoad(...)@69): {"Name": "Core", "cpuName": "cpu0", "percent": 33, "totalUser": 1533306, "totalNice:" 0, "totalSys": 1216838, "totalIdle": 5681926}
有沒有人知道為什么會這樣,或者我應該采取一些方法來解決我的問題?
編輯:經過一些挖掘,我想我已經找到了一些關於協議的信息,這里: https : //www.autosar.org/fileadmin/user_upload/standards/foundation/1-0/AUTOSAR_PRS_DiagnosticLogAndTraceProtocol.pdf在第 16 頁。如果你有再進一步的建議,將不勝感激。
您正在使用 TCP(傳輸控制協議),它通過流通過網絡發送數據。 所以你需要為你發送的每個包定義“數據長度”。
當客戶端/服務接收到該數據流時,它根據“數據長度”值准確讀取包的字節數。
您可以查看下面的示例以了解更多詳細信息:
private void __updateRecvHeaderData(byte[] bytes) {
if (bytes.length >= Constants.HEADER_BYTES) { // header length
byte[] header = Arrays.copyOfRange(bytes, 0, Constants.HEADER_BYTES);
__dataSize = MessagePacker.byteToShort(header); // network to host short
__recvHeader = false;
// package = |2 bytes header| <content bytes> |
byte[] data = Arrays.copyOfRange(bytes, Constants.HEADER_BYTES, __dataSize + Constants.HEADER_BYTES);
__onRecvData(data); // recursion
}
}
文件類可以在這里找到: TCP receive and split the stream data by data-length
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.