我在andorid上創建UDP服務。 對於代碼的清晰度部分複製在這裏:UDP數據包分離
byte[] message = new byte[1500];
DatagramPacket packet = new DatagramPacket(message, message.length);
socket = new DatagramSocket(Constants.LISTENING_PORT_NUMBER);
socket.receive(packet);
問題是,我不斷收到UDP報文。例如數據包#1(250字節長),數據包#2(182字節長),數據包#3(403字節長)等...
我需要獲取和處理單獨的UDP數據包,長度。 根據UDP協議規範,UDP數據包定義了消息邊界。 但是我發現Java中沒有可以分離UDP數據包的解決方案。
在我當前的解決方案中,我必須定義必須讀取的數據包長度,但在收到數據包之前我不知道數據包的長度。
我錯過了一個觀點嗎?
編輯: 感謝兩個托比亞斯和shazin都是正確答案。悲傷我不能標記兩個答案是正確的。
socket.receive(packet);
將接收到UDP包的邊界,隨後的包可以用另一個socket.receive(packet);
讀取。
我的問題應該是,在第一條消息的過程中,由於同步處理而未處理到達的進一步消息,現在我將消息處理傳遞給異步任務,並且希望能夠及時地捕獲所有到達的數據包。
我相信無論你設置什麼,當你收到數據包時都會被重寫。堅持'直到我拿起文件。 –
爲什麼你會使用udp? tcp具有數據包序列和整理保險 – njzk2
@ njzk2實時流數據,您更喜歡時間超過可靠性。 –