簡體   English   中英

從 TCP 套接字 Java 讀取時數據顯示不正確

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM