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