[問題] socket recv 問題-已解決

看板C_and_CPP (C/C++)作者 (Brian Yang)時間13年前 (2012/12/05 15:12), 編輯推噓0(005)
留言5則, 1人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Ubuntu 12.04 g++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 均為標準 問題(Question): TCP socket 手上有個socket程式,server端會當accept一個連線之後 就會create一個thread去收這個連線的資料 要傳送的封包中有一個自己定義的表頭,裡面紀錄了後面資料的長度 因此server在recv時候會先收自訂表頭大小(12bytes) 再根據表頭中資料長度來收後續的資料(1328bytes) 跑著跑著~悲劇就發生了 就是某一個表頭裡面資料就跑掉了,長度變成很大的數字 所以就會導致要收後續之資料掰掉 請問會什麼樣的情況導致收起來是錯的?? 程式碼(Code):(請善用置底文網頁, 記得排版) http://ideone.com/uChnoB 補充說明(Supplement): 程式碼是這個thread收資料的部分 謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.38.126

12/06 15:20, , 1F
自問自答 因為client端用send之後,下面buf滿了,所以
12/06 15:20, 1F

12/06 15:20, , 2F
送不完全,因此導致收端當然用固定格式套會出錯,所以
12/06 15:20, 2F

12/06 15:21, , 3F
在client要記得去判斷回傳的長度是否完整,沒有下次要
12/06 15:21, 3F

12/06 15:22, , 4F
send
12/06 15:22, 4F

12/06 15:22, , 5F
繼續送剛剛沒有送出去的部分
12/06 15:22, 5F
文章代碼(AID): #1GllFUqH (C_and_CPP)
文章代碼(AID): #1GllFUqH (C_and_CPP)