當前位置:編程學習大全網 - 圖片素材 - c# winform 使用socket 接收兩條信息! 向同壹個EndPiont 發送兩條信息,為什麽接收端只處理了壹條!

c# winform 使用socket 接收兩條信息! 向同壹個EndPiont 發送兩條信息,為什麽接收端只處理了壹條!

不太清楚妳的代碼是怎樣寫的,所以只能從可能出現的問題上進行分析。

1、UDP丟包。使用UDP的時候經常會出現的問題,這個只能要求重發。

2、TCP粘包。如果妳是新手這個問題是很容易出現的。妳要知道,Socket.send並不是把數據發出去,而是把信息寫入到了底層winsock的緩沖區,在有空的時候給他發出去。如果妳數個SEND是連續執行的,就會出現粘包的問題。比如妳要發送12345,67890這兩條,接受方就可能收到1234567890這樣的數據。如果妳註意receive函數的返回值,就會發現妳收到的大小是10而不是預先的5.

解決辦法有三種

1、固定信息的長度,每次從接受緩沖區中讀出壹定的長度。發送時不足長度的補齊。當然,這會加大開銷

2、要求接收方回執,每次send後進入receive等待回執,避免連續Send。當然,這也會增加開銷。通常這種做法只在接收方要進行信息的後續處理時采用

3、用NetworkStream+分隔符的方法發送和接收。分隔符可以使用信息中不包含的字符來做。譬如如果信息中永遠不包含換行符,那麽可以在每條發送信息的結尾附加壹個換行符,然後NetworkStream讀取時以換行符作為分隔。每遇到換行符就作為壹個數據包讀出。

  • 上一篇:劉濤主演的《大軍師司馬懿之軍師聯盟》何時首播?
  • 下一篇:芒果臺最近很火的電視劇
  • copyright 2024編程學習大全網