沒什么技術(shù)含量,將select模型做簡(jiǎn)單的封裝,同時(shí)提供服務(wù)器端和客戶端所用的接口。功能實(shí)現(xiàn)上對(duì)數(shù)據(jù)的發(fā)送和接收
都做了緩存,搞得跟異步IO一樣 = =#。
這個(gè)例子聊天服務(wù)器可以使用telnet登錄,服務(wù)器直接將telnet發(fā)來的字符串轉(zhuǎn)發(fā)給所有客戶端。我稍微寫了一個(gè)小的網(wǎng)絡(luò)
模塊,可以用于以后寫網(wǎng)絡(luò)程序的例子代碼,也算是練習(xí)下網(wǎng)絡(luò)庫的設(shè)計(jì)。
系統(tǒng)總體類圖如下:
Address用于包裝sockaddr_in結(jié)構(gòu)體,目的就是讓系統(tǒng)用起來更方便。
Buffer用于封裝原始內(nèi)存,主要目的是拿來做發(fā)送、接收數(shù)據(jù)緩沖。
Fdset差不多和FD_SET一樣,只是這里自己寫一個(gè)FD_SET,可以讓連接數(shù)不受FD_SETSIZE的限制。
Socket封裝了基本的SOCKET操作,包括創(chuàng)建、銷毀套接字。
Session比較有意思,按我的意思,就是代表一個(gè)網(wǎng)絡(luò)連接。對(duì)于服務(wù)器端,可能會(huì)有很多連接,每一個(gè)連接可以用一個(gè)
Session對(duì)象表示。而對(duì)于客戶端,只有一個(gè)連接,那么就是一個(gè)Session對(duì)象。對(duì)于Session對(duì)象來說,可以進(jìn)行數(shù)據(jù)的
發(fā)送和接收,因此這里Session有recv、send之類的接口。為了緩沖數(shù)據(jù),所以Session對(duì)于讀寫分別有一個(gè)Buffer對(duì)象。
Server代表一個(gè)服務(wù)器,直接提供創(chuàng)建服務(wù)器的接口。同時(shí)使用一個(gè)unsigned long作為每一個(gè)連接的ID號(hào)。
Client代表一個(gè)客戶端,可以直接用于連接服務(wù)器。
下載文件提供網(wǎng)絡(luò)模塊代碼,以及三個(gè)例子程序。點(diǎn)擊下載