只有TCP有粘包現象,UDP永遠不會粘包!
粘包:在接收數據時,一次性多接收了其它請求發送來的數據(即多包接收)。如,對方第一次發送hello,第二次發送world,
在接收時,應該收兩次,一次是hello,一次是world,但事實上是一次收到helloworld,一次收到空,這種現象叫粘包。 原因 粘包問題主要還是因為接收方不知道消息之間的界限,不知道一次性提取多少字節的數據所造成的。 什么情況會發生:
1、發送端需要等緩沖區滿才發送出去,造成粘包(發送數據時間間隔很短,數據很小,會合到一起,產生粘包) 2、接收方不及時接收緩沖區的包,造成多個包接收(客戶端發送了一段數據,服務端只收了一小部分,服務端下次再收的時候還是從緩沖區拿上次遺留的數據,產生粘包)
解決方案:
一個思路是發送之前,先打個招呼,告訴對方自己要發送的字節長度,這樣對方可以根據長度判斷什么時候終止接受。