《Unix網絡編程卷1》筆記(1):第一章簡介——使用Cygwin運行示例代碼

內容概要:

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 -> makecd ../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

主機序轉網絡序(大端)

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章