求助!CAsyncSocket的OnReceive()剛建立連線時正常,執行一段時間後不再觸發

2022-10-10 05:51:29 字數 1747 閱讀 6187

1樓:杜茂彥

說說你接收程式問題。

我想既然你都是非同步處理的,

你這邊應該有多長就收多長,總不能資料沒有來還一直都在讀罷?

因此你用while一直強行讀取的方法有可能犯忌,也有可能導致socket狀態異常,出現你說的問題。

另外既然有資料,你總應該讀完吧,否則socket怎麼知道應不應該再次呼叫你的onreceive呢?

所以建議你一次把所有資料讀入,然後再自行處理長度不夠和太長問題。

while( ireadlen < 4)

{iret = pclientsocket->receive( length + ireadlen , 4 - ireadlen );

2樓:手機使用者

我加了一句asyncselect(fd_read)問題貌似解決了。

我對casyncsocket瞭解不深,這個接收**的邏輯是在網上學的,好像他認為服務端接收時會將客戶端即使是分批傳送的一個包在接收佇列中排好。不知道這個邏輯對不對....

3樓:匿名使用者

過載casyncsocket::onreceive新增**

char buf[10];

int len=receive(buf,10);

if(len>0)

casyncsocket及csocket的區別和用法

4樓:匿名使用者

ca syncsocket和c socket的區別類似於非同步和同步儲存器的區別。

一、ca syncsocket相當於同步儲存器。

同步動態隨機儲存器,同步是指記憶體工作需要同步時鐘,內部的命令的傳送與資料的傳輸都以它為基準;動態是指儲存陣列需要不斷的重新整理來保證資料不丟失;隨機是指資料不是線性依次儲存,而是自由指定地址進行資料讀寫。

二、c socket相當於非同步儲存器。

動態隨機存取儲存器,最為常見的系統記憶體。dram 只能將資料保持很短的時間。為了保持資料,dram使用電容儲存,所以必須隔一段時間重新整理(refresh)一次,如果儲存單元沒有被重新整理,儲存的資訊就會丟失。

5樓:

前者是非同步通訊,後者是同步通訊;前者是非阻塞模式,後者是阻塞模式。另外,非同步非阻塞模式有

時也被稱為長連線,同步阻塞模式則被稱為短連線。

使用casyncsocket時,send流程和recieve流程是不同的,不理解這一點就不可能順利使用casyncsocket。

msdn對casyncsocket的解釋很容易讓你理解為:只有onsend被觸發時你send才有意義,你才應該send,

同樣只有onrecieve被觸發時你才應該recieve。

casyncsocket的connect怎麼判斷是否連上了

6樓:匿名使用者

如果返回0 沒成功,你要呼叫 getlasterror看看是什麼型別的錯誤。

onconnect()函式當有 fd_connect事件 上報的時候觸發

通過onconnect裡面的那個引數來判斷連線是否成功

7樓:匿名使用者

onconnect就是連線建立後才觸發的啊,你在connect時是無法判斷是否連線成功的(但是你可以判斷連線失敗,如果連線失敗,wsagetlasterror返回的值不是wsaewouldblock),你必須等到onconnect被觸發才知道是不是成功。這就是所謂「非同步」,執行函式時無法知道執行的結果是什麼

關於牛蛙養殖的問題。求助!求助!求助

俗話說 弱的怕硬的,硬的怕狠的,狠的怕不怕死的。不能出點強硬處事沒人理你,先去公安局報案,最好鬧大點,把他們局長搞出來,他們不管你就放狠話,就說鬧出人命,你們有種也不要來管,在找些親朋好友把那人家抄了 很明顯,一開始就想吃定你了,收貨單據就只寫,小王。正規的收貨單務必寫全名。典型的無賴。把他兒子拉走...

這段話什麼意思,求助求助求助求助求助求助求助求助求助求助簡短

叫你淡定一點,不要什麼東西都爭一口氣,對就是對錯就是錯,爭啥 做人不要較真,糊塗點更開心。叫你睜一隻眼閉一隻眼,別什麼事情都刨根問底。有些事情非要知道根生活就會不幸福。這個意思你看不懂,是不是外國人看不懂漢子 站在世界的頂端,身邊沒有人陪伴,又怎樣?這段話什麼意思,求助求助簡短說。求助求助。站在世界...

後果什麼意思,求助求助求助求助求助簡短說

後果,就是這件事,這個東西,造成的影響 下三濫什麼意思,求助求助求助求助求助求助簡短說。指你做事為達到目的使用的卑劣,下流有失道德的手段和方法 見不得人的手法,做,謀取你想要的東西。你這人太有心眼什麼意思,求助求助求助求助求助求助求助求助求助簡短說。太有心眼了。說明你是個心機表。很有心計。很會算計。...