重構,從底層包裝乙個組socket阻塞TCP

2021-04-01 16:18:16 字數 1132 閱讀 5362

開始寫網路方面的程式,和我說的一樣我要寫成封裝封裝再封裝。現在還沒用到繼承,等繼續封狀非阻塞模式的時候就要從這個類繼承了。從原始的api 寫的,沒用到mfc所以可以在sdk或者wtl程式中直接用了。

類的方法如下:

首先是初始化

就是wsastartup我將他寫成靜態函式是有意義的

呼叫如下

if( cbtsocket::init() != ret_success )

就阻塞的tcp來講socket可以有3種

第一種是伺服器端監聽的

可以用如下方法聲成

cbtsocket slisten;

slisten.create();//create有過載

slisten.bind(9527);//9527為埠號

slisten.listen();

printf("伺服器已在監聽狀態/n");

cbtsocket sac;

aaa:

if(slisten.accept(sac) != ret_success//此處也可以呼叫sac.acceptinit(slisten);

第二種是伺服器接受連線的socket

如上,2種方法建立

第三種是客戶端的

可以由如下方法建立

cbtsocket s;

s.create();

if(s.connect("127.0.0.1", 9527) != ret_success)

return 0;

還有其他一些方法自己看**

至於所有成員函式的返回如下

#define ret_success  0x00000000 // 成功

#define ret_badparam 0x00000001 // 引數錯誤 //此引數通常忽略不會發生

#define ret_wsaerror 0x00000002 // socket錯誤 此時候需要呼叫geterrnum來得到錯誤

#define ret_errsocket 0x00000003 //socket沒有初始化

如果是ret_wsaerror的話可以呼叫

geterrnum()//對應wsagetlasterror

geterrdes(char *szerrdes)

得到錯誤號

如何重構乙個系統

發現乙個很有意思的情況,做系統寫 多年了,遇到的需求基本上是在已有的系統上實現,從頭來實現的系統基本上沒有。無論是從頭是實現乙個系統,還是維護乙個系統,當時實現的技術可能是最先進的 規劃的產品邏輯是合理的,隨著時間的發展 開發人員的變更 系統的 質量會逐漸腐化,加個feature太麻煩,改個bug涉...

加入乙個組播組

網路中的一台主機如果希望能夠接收到來自網路中其它主機發往某乙個組播組的資料報,那麼這麼主機必須先加入該組播組,然後就可以從組位址接收資料報。在廣域網中,還涉及到路由器支援組播路由等,但本文希望以乙個最為簡單的例子解釋清楚協議棧關於組播的乙個最為簡單明瞭的工作過程,甚至,我們不希望涉及到igmp包。我...

乙個專案工程的重構小結

首次看到移交到我手上的c 工程那個7千多行 的檔案時,既佩服又擔心,前輩的構架能力讓我甘拜下風,同時擔心能不能勝任。在研究原始碼的時候,也解決幾個線上遺留的問題。愈發覺得有重構的必要 因為這將是我負責的 不完全重構 那叫重寫,一是否定了前輩的功勞,二是接觸不久業務不熟,風險大。因此總體原則是逐步重構...