內容概要:
1. 網絡裏非常重要的一個模型:C(客戶端client)-S(服務器server)模型,進程間構成該模型,可能在不同主機上,也可能在同一主機上。
2. TCP/IP協議棧四層模型,如下圖所示(摘自維基百科),socket是傳輸層的接口。
3. 重要的標準:POSIX標準,大部分廠商都採用該標準的網絡API
4. TCP/UDP一般都需要指定協議族、IP地址、端口號。
5. TCP客戶端讀取的socket流程:socket()-> connect() -> read()
TCP服務器的socket流程:socket() -> bind() -> listen() -> accept() -> write()
6. 技巧:要認真對待錯誤處理,包裹函數技巧(Wrapper Functions)
編程實踐:
網上下到書的源碼unpv13e,都是基於unix系統的,重裝BSD或者Linux不值當,虛擬機估計跑會卡,先使用Cygwin試試吧,Cygwin能在windows上模擬unix編程環境,普通編譯代碼可以生成在windows下的exe執行文件,打算今後多學習學習。
安裝Cygwin網上的教程一抓一大把,一個不錯的說明:下載安裝Cygwin。
注意“Devel”分支把必須裝的編譯調試組件都裝了。
安裝完成以後
1) 運行Cygwin終端,/cygdrive目錄下掛在有windows的盤符,cd切到unpv13e目錄下
2) 參見unpv13e代碼的ReadMe文件,運行./configure檢查配置生成Makefile
3) 依次運行cdlib -> make,cd ../libfree -> make
4) 後面的cd../libroute編譯不過,沒有4.4BSD的代碼文件,暫時不管了,後續學到再搞
5) 實驗第一章的例子,cd../intro –> make daytimetcpcli,生成了daytimetcpcli.exe文件
6) 運行 ./daytimetcpcli 127.0.0.1
第一次運行返回錯誤connecterror: Connection refused
到網上搜了一下,Connectionrefused 這個錯誤的一般情況下是:IP地址可以訪問,但端口無法訪問,馬上想到要訪問的時間服務沒有開啓,windows下可以在cmd下用netstat -na檢查ip和端口,發現我的windows果然沒開13端口。
這裏要注意此例子要訪問的服務是daytime服務,剛開始我以爲是NTP服務,運行了該服務還是沒反應,後來一看NTP是UDP的且是123端口,才重新查了一下,第一章的這個時間服務用的是daytime服務,在windows 組件嚮導裏面選擇”網絡服務”->”簡單Tcp/ip服務” 勾上,就會安裝好daytime服務。
網絡編程常用代碼:
函數名或宏名 |
說明 |
bzero |
對一塊內存清0 |
inet_pton |
點分十進制字符串轉爲int數值 |
htons |
主機序轉網絡序(大端) |
|
|