如果不知道對方發送多少資料,recv就有可能遇到這次recv恰好把資料接受完了,但又不知道,從而再次recv,但是recv是阻塞的,只要對方不發送資料,recv就始終阻塞等待,就像程式死掉一樣。
請問大家是怎么解決這個問題的呢?
uj5u.com熱心網友回復:
哪位給個答案uj5u.com熱心網友回復:
在獨立的執行緒中等待。另外,如果是tcp的,最好定義一個資料結構,指定長度。因為tcp的流會連續到來,有可能尾巴上有半個包uj5u.com熱心網友回復:
用多執行緒吧,把接受單獨放一個執行緒。或者使用套接字的非阻塞模式uj5u.com熱心網友回復:
比較省事的方法就是用一些類似libuv、libev等庫,直接在回呼函式中處理資料,不需要去關心資料到底啥時候來。 或者用select、epoll等來管理套接字。單獨開執行緒接收也可以。uj5u.com熱心網友回復:
加一個頭部資訊,來確定具體該獲得具體多長的訊息。uj5u.com熱心網友回復:
recv 最后引數 用 MSG_PEEK, 可以窺探是否有資料uj5u.com熱心網友回復:
業務資料加上個包頭,在包頭中記錄資料長度。接收資料后先決議資料長度,沒有接收足長則繼續。否則就退出回圈。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/197571.html
標籤:C語言
下一篇:{求解}把a到b范圍內(包括a和b)的所有質陣列成質數對,組成方法為:最小質數與最大質陣列成一對,第二小質數和第二大質陣列成一對...
