有關socket各方法執行順序問題

2021-09-30 07:59:14 字數 1393 閱讀 4120

最近在寫這個方面的程式!

假設客戶端是傳送資料的,伺服器是用來接收資料的!

我認識到的順序是:派生於casyncsocket

1,伺服器建乙個socket來create and listen

2,客戶端建乙個socket來create and connect(這個時候伺服器端自動觸發onaccept(),客戶端自動觸發onconnect())

3,伺服器端在建乙個socket來接收資料!

4,客戶端send資料,這個時候客戶端自動觸發onsend()

5,伺服器端自動觸發onreceive(),用來接收資料(在這個裡面寫各種receive函式)

6,資料不停得在傳送,這個時候伺服器在不停得接收觸發onreceive()

7,資料接收完畢,各個socket關閉!

socket的執行方式是這樣的麼?

我覺得在第5部的時候不對,是不是伺服器端當有資料傳送過來的時候,用receive來接收資料,這樣才能觸發onreceive(),啊?

在onreceive方法中來做些什麼東西呢?還得呼叫receive()來接受資料是麼?

就是得用receive來觸發onreceive,所以你必須不斷的呼叫receive。

你可以看成是這樣:

receive(...)

那這樣的話,我需要給receive這個函式放在**啊?onaccept()裡面麼?

我想這樣寫行不行?

void onaccept(int nerrorcode)

void onreceive(int nerrorcode)

這樣就能不斷的去觸發了吧?當接收的位元組為0的時候就return

這樣可以麼?

最好把receive放到單獨執行緒裡面去執行,因為不斷地呼叫receive會阻塞當前執行緒。

你的這種方式在c#裡面可以,但是c++不行。因為c#封裝了乙個執行緒不斷的呼叫receive。而在c++裡面這個處理只能程式設計師自己完成。因為receive以後立刻就返回了,這個時候未必有網路資料,也就不會呼叫onreceive,也就不會繼續下一次的呼叫receive了。

說的詳細點麼?我剛弄這些,求大俠給點建議啊!

c++中是有資料來的時候就能觸發onreceive()麼?

如果是這樣的話,我在onreceive函式中做receive迴圈怎麼樣?(只要接收不完我就不停得receive)

我下午的時候試過了,是空的,不知道我**弄錯了又!

現在這個檔案傳送給我頭都弄大了!

哪個大哥能給我點**啊?讓小弟借鑑一下啊!

在接收發資料的時候是怎麼封裝的啊?

我還想知道receive這個函式是怎麼來執行的!

還有就是怎麼send資料的?

在那個函式中呼叫?怎麼封裝的?

還有就是檔案開啟和寫入的方式都是什麼樣啊?

英超直播

構造方法執行順序

在呼叫子類構造器之前,會先呼叫父類構造器,當子類構造器中沒有使用 super 引數或無引數 指定呼叫父類構造器時,是預設呼叫父類的無參構造器,如果父類中包含有參構造器,卻沒有無參構造器,則在子類構造器中一定要使用 super 引數 指定呼叫父類的有參構造器,不然就會報錯。靜態塊 用static申明,...

Unity方法執行順序

1.awake遊戲物體例項化後並處於啟用狀態呼叫,即使指令碼元件沒有啟用也會被呼叫 2.onenable遊戲物體 指令碼元件啟用時呼叫 會反覆觸發 3.start遊戲物體與指令碼元件處於啟用狀態呼叫 只會呼叫一次,物體關閉在啟用2會呼叫3不呼叫 4.fixedupdate根據設定的幀率執行 主要用於...

iOS load方法執行順序

1 load方法是在main函式執行前執行的 2 load方法是在載入類和分類時系統呼叫,一般不手動呼叫,如果想要在類或分類載入時做一些事情,可以重寫類或分類的 load方法。3 類 分類的 load方法,在程式執行過程只呼叫一次。呼叫順序 1 類要優先於分類呼叫 load方法 2 子類呼叫 loa...