請問各位大俠,有沒有遇到這種情況??
服務端是C#撰寫
客戶端為Delphi ,用的TClientSocket,非阻塞模式
問題是,客戶端在接收時10條資料,加密后大小在2K多,每次接收的情況不同,有時候可以一次性都接收到、有的時候就只能分兩次接收,如果是第二種情況,在解密就會失敗!你們誰遇到過,求大俠指點迷津,這到底是什么原因?????!!!!!
uj5u.com熱心網友回復:
讀取到資料后寫入快取,達到你的要求后再進行處理(解密)uj5u.com熱心網友回復:
問題可能是,客戶端ClienDataSet與服務器的匹配有問題,2k的資料應該一次性能傳輸和接收。uj5u.com熱心網友回復:
服務端并沒有對資料的發送做處理,只要有就發送了
客戶端也是,只要有就接收了
uj5u.com熱心網友回復:
做通信(網路 or 串口等),最基本的要考慮分包情況嘛,緩沖機制是必要的。uj5u.com熱心網友回復:
應該通訊問題,最好做一個等待然后回圈接收,或者發送回來一個大小,如果不等于則回圈接收uj5u.com熱心網友回復:
如果說不做,只是像我那樣簡單的接收,為何會出現我說的那種情況
uj5u.com熱心網友回復:
這個是屬于粘包的處理問題,網路的情況是很復雜的,所以你指望你一個事件把你的發送包全部接收完成,這個是不太現實的,如果服務端發送多個包的時候,甚至可能存在一次性接收了多個包,所以,你在接收事件中要做的就是把資料接收了都寫入到快取中去,然后單獨開執行緒去處理快取,或者可以直接在接收位置處理,不過不是立即處理,而是也是應該處理快取。uj5u.com熱心網友回復:
傳輸途中被路由器啥的拆分或者合并包了轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/61668.html
標籤:網絡通信/分布式開發
下一篇:delphixe3中運行程式后報錯Project Project1.exe raised exception class $C0000005 wit
