1、UDP丟包。使用UDP的時候經常會出現的問題,這個只能要求重發。
2、TCP粘包。如果妳是新手這個問題是很容易出現的。妳要知道,Socket.send並不是把數據發出去,而是把信息寫入到了底層winsock的緩沖區,在有空的時候給他發出去。如果妳數個SEND是連續執行的,就會出現粘包的問題。比如妳要發送12345,67890這兩條,接受方就可能收到1234567890這樣的數據。如果妳註意receive函數的返回值,就會發現妳收到的大小是10而不是預先的5.
解決辦法有三種
1、固定信息的長度,每次從接受緩沖區中讀出壹定的長度。發送時不足長度的補齊。當然,這會加大開銷
2、要求接收方回執,每次send後進入receive等待回執,避免連續Send。當然,這也會增加開銷。通常這種做法只在接收方要進行信息的後續處理時采用
3、用NetworkStream+分隔符的方法發送和接收。分隔符可以使用信息中不包含的字符來做。譬如如果信息中永遠不包含換行符,那麽可以在每條發送信息的結尾附加壹個換行符,然後NetworkStream讀取時以換行符作為分隔。每遇到換行符就作為壹個數據包讀出。