資源描述:
《socket簡易教程》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、網(wǎng)絡socket編程指南?(轉(zhuǎn)貼)1http://www.chinaunix.net?作者:流浪者??發(fā)表于:2003-04-11?17:09:07?Beej網(wǎng)絡socket編程指南?--------------------------------------------------------------------------------?介紹? Socket?編程讓你沮喪嗎?從man?pages中很難得到有用的信息嗎?你想跟上時代去編Internet相關(guān)的程序,但是為你在調(diào)用?connect()?前的
2、bind()?的結(jié)構(gòu)而不知所措?等等…??????好在我已經(jīng)將這些事完成了,我將和所有人共享我的知識了。如果你了解?C?語言并想穿過網(wǎng)絡編程的沼澤,那么你來對地方了。?--------------------------------------------------------------------------------?讀者對象?? 這個文檔是一個指南,而不是參考書。如果你剛開始?socket?編程并想找一本入門書,那么你是我的讀者。但這不是一本完全的?socket?編程書。?-----------
3、---------------------------------------------------------------------?平臺和編譯器?? 這篇文檔中的大多數(shù)代碼都在?Linux?平臺PC?上用?GNU?的?gcc?成功編譯過。而且它們在?HPUX平臺?上用?gcc?也成功編譯過。但是注意,并不是每個代碼片段都獨立測試過。?--------------------------------------------------------------------------------?目錄:
4、1)?什么是套接字???2)?Internet?套接字的兩種類型??3)?網(wǎng)絡理論??4)?結(jié)構(gòu)體?5)?本機轉(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()函數(shù)?16)?gethostname()函數(shù)?
5、17)?域名服務(DNS)?18)?客戶-服務器背景知識??19)?簡單的服務器?20)?簡單的客戶端?21)?數(shù)據(jù)報套接字Socket?22)?阻塞?23)?select()--多路同步I/O?24)?參考資料??--------------------------------------------------------------------------------?1)什么是?socket?: 你經(jīng)常聽到人們談論著?“socket”,或許你還不知道它的確切含義。現(xiàn)在讓我告訴你:它是使用?標準Uni
6、x?文件描述符?(file?descriptor)?和其它程序通訊的方式。什么?你也許聽到一些Unix高手(hacker)這樣說過:“呀,Unix中的一切就是文件!”那個家伙也許正在說到一個事實:Unix?程序在執(zhí)行任何形式的?I/O?的時候,程序是在讀或者寫一個文件描述符。一個文件描述符只是一個和打開的文件相關(guān)聯(lián)的整數(shù)。但是(注意后面的話),這個文件可能是一個網(wǎng)絡連接,F(xiàn)IFO,管道,終端,磁盤上的文件或者什么其它的東西。Unix?中所有的東西就是文件!所以,你想和Internet上別的程序通訊的時候,你將
7、要使用到文件描述符。你必須理解剛才的話?,F(xiàn)在你腦海中或許冒出這樣的念頭:“那么我從哪里得到網(wǎng)絡通訊的文件描述符呢?”,這個問題無論如何我都要回答:你利用系統(tǒng)調(diào)用?socket(),它返回套接字描述符?(socket?descriptor),然后你再通過它來進行send()?和?recv()調(diào)用?!暗?..”,你可能有很大的疑惑,“如果它是個文件描述符,那么為什?么不用一般調(diào)用read()和write()來進行套接字通訊?”簡單的答案是:“你可以使用!”。詳細的答案是:“你可以,但是使用send()和recv
8、()讓你更好的控制數(shù)據(jù)傳輸?!贝嬖谶@樣一個情況:在我們的世界上,有很多種套接字。有DARPA?Internet?地址?(Internet?套接字),本地節(jié)點的路徑名?(Unix套接字),CCITT?X.25地址?(你可以將X.25?套接字完全忽略)。也許在你的Unix?機器上還有其它的。我們在這里只講第一種:Internet?套接字。?--------------------------------