資源描述:
《網(wǎng)絡(luò)socket編程指南.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、網(wǎng)絡(luò)socket編程指南--------------------------------------------------------------------------------介紹 Socket編程讓你沮喪嗎?從manpages中很難得到有用的信息嗎?你想跟上時(shí)代去編Internet相關(guān)的程序,但是為你在調(diào)用connect()前的bind()的結(jié)構(gòu)而不知所措?等等…????好在我已經(jīng)將這些事完成了,我將和所有人共享我的知識(shí)了。如果你了解C語言并想穿過網(wǎng)絡(luò)編程的沼澤,那么你來對(duì)地方了。-------------------------------------
2、-------------------------------------------讀者對(duì)象? 這個(gè)文檔是一個(gè)指南,而不是參考書。如果你剛開始socket編程并想找一本入門書,那么你是我的讀者。但這不是一本完全的socket編程書。--------------------------------------------------------------------------------平臺(tái)和編譯器? 這篇文檔中的大多數(shù)代碼都在Linux平臺(tái)PC上用GNU的gcc成功編譯過。而且它們?cè)贖PUX平臺(tái)上用gcc也成功編譯過。但是注意,并不是每個(gè)代碼片段都獨(dú)立測試
3、過。--------------------------------------------------------------------------------目錄:1)什么是套接字??2)Internet套接字的兩種類型?3)網(wǎng)絡(luò)理論?4)結(jié)構(gòu)體5)本機(jī)轉(zhuǎn)換6)IP地址和如何處理它們?7)socket()函數(shù)8)bind()函數(shù)9)connect()函數(shù)10)listen()函數(shù)11)accept()函數(shù)12)send()和recv()函數(shù)13)sendto()和recvfrom()函數(shù)14)close()和shutdown()函數(shù)15)getpeername
4、()函數(shù)16)gethostname()函數(shù)17)域名服務(wù)(DNS)18)客戶-服務(wù)器背景知識(shí)?19)簡單的服務(wù)器20)簡單的客戶端21)數(shù)據(jù)報(bào)套接字Socket22)阻塞23)select()--多路同步I/O24)參考資料?--------------------------------------------------------------------------------什么是socket?? 你經(jīng)常聽到人們談?wù)撝皊ocket”,或許你還不知道它的確切含義?,F(xiàn)在讓我告訴你:它是使用標(biāo)準(zhǔn)Unix文件描述符(filedescriptor)和其它程序通訊
5、的方式。什么?你也許聽到一些Unix高手(hacker)這樣說過:“呀,Unix中的一切就是文件!”那個(gè)家伙也許正在說到一個(gè)事實(shí):Unix程序在執(zhí)行任何形式的I/O的時(shí)候,程序是在讀或者寫一個(gè)文件描述符。一個(gè)文件描述符只是一個(gè)和打開的文件相關(guān)聯(lián)的整數(shù)。但是(注意后面的話),這個(gè)文件可能是一個(gè)網(wǎng)絡(luò)連接,F(xiàn)IFO,管道,終端,磁盤上的文件或者什么其它的東西。Unix中所有的東西就是文件!所以,你想和Internet上別的程序通訊的時(shí)候,你將要使用到文件描述符。你必須理解剛才的話?,F(xiàn)在你腦海中或許冒出這樣的念頭:“那么我從哪里得到網(wǎng)絡(luò)通訊的文件描述符呢?”,這個(gè)問題無論如
6、何我都要回答:你利用系統(tǒng)調(diào)用socket(),它返回套接字描述符(socketdescriptor),然后你再通過它來進(jìn)行send()和recv()調(diào)用。“但是...”,你可能有很大的疑惑,“如果它是個(gè)文件描述符,那么為什么不用一般調(diào)用read()和write()來進(jìn)行套接字通訊?”簡單的答案是:“你可以使用!”。詳細(xì)的答案是:“你可以,但是使用send()和recv()讓你更好的控制數(shù)據(jù)傳輸?!贝嬖谶@樣一個(gè)情況:在我們的世界上,有很多種套接字。有DARPAInternet地址(Internet套接字),本地節(jié)點(diǎn)的路徑名(Unix套接字),CCITTX.25地址(你
7、可以將X.25套接字完全忽略)。也許在你的Unix機(jī)器上還有其它的。我們?cè)谶@里只講第一種:Internet套接字。--------------------------------------------------------------------------------Internet套接字的兩種類型? 什么意思?有兩種類型的Internet套接字?是的。不,我在撒謊。其實(shí)還有很多,但是我可不想嚇著你。我們這里只講兩種。除了這些,我打算另外介紹的"RawSockets"也是非常強(qiáng)大的,很值得查閱。那么這兩種類型是什么呢?一種是"StreamSockets"