簡體   English   中英

非阻塞Java套接字客戶端上的錯誤讀取

[英]Erroneous reading on Non-blocking java socket client

我有一個使用非阻塞IO用Java編寫的客戶端/服務器應用程序。
有幾種消息類型以Json編碼的形式傳輸,並在每個消息的末尾附加了一個消息定界符。
客戶端讀取字節並合並成塊的消息。 在正常情況下,它可以正常工作,但在繁重的情況下,我會得到一個包含不正確順序的消息的塊。 我的意思是,假設我有一條消息m1 =“ AAABBBCCCDDD”和m2 =“ EEEFFF”,分隔符為“ ||”。 收到消息后,它應該是“ AAABBBCCCDDD || EEEFFF ||”。 但是接收到“ AAABBBEEEFFF || CCCDDD ||”。 結果,它無法解析消息。
實際上,我想聽聽使用無阻塞IO開發網絡應用程序時應考慮的想法。 順序錯誤的原因是什么? 讀者代碼是這樣的:

ByteBuffer buffer = ByteBuffer.allocate(20000);
count = 0;
while ((count = channel.read(buffer)) > 0) {
    buffer.flip();
    processSocketData(Charset.defaultCharset().decode(buffer));
}

processSocketData()方法類似於:

socketData.append(newData);
delIndex = socketData.indexOf(cGlobals.delimiterSequence);

if (delIndex > -1) {
    processRawMessage(socketData.substring(0, delIndex));
    socketData.delete(0, delIndex + cGlobals.delimiterSize);
}

在處理之前,您需要先進行flip()在處理完緩沖區之后,還需要compact()clear()緩沖區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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