資源描述:
《【精品】linux socket基礎教程.doc》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。
1、LINUXC語言SOCKET(轉)2011-02-2220:10:051分類:默認分類I標簽:I字號大中小訂閱介紹Socket編程讓你沮喪嗎?從manpages中很難得到有用的信息嗎?你想跟上時代去編Internet相關的程序,但是為你在調用connect()前的bind()的結構而不知所措?等等…好在我已經(jīng)將這些事完成了,我將和所有人共亨我的知識了。如果你了解C語言并想穿過網(wǎng)絡編程的沼澤,那么你來對地方了。讀者對象這個文檔是一個指南,而不是參考書。如果你剛開始socket編程并想找一?本入門書,那么你是我的讀者。但這不是一本完全的socket編程書。平臺和編譯器這
2、篇文檔中的大多數(shù)代碼都在Linux平臺PC上用GNU的gcc成功編譯過。而口它們在HPUX平臺上用gcc也成功編譯過。但是注意,并不是每個代碼片段都獨立測試過。目錄:1)什么是套接字?2)Internet套接字的兩種類型3)網(wǎng)絡理論4)結構體5)本機轉換6)IP地址和如何處理它們7)socket()函數(shù)8)bin*)函數(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)
3、gethostname()函數(shù)17)域名服務(DNS)18)客戶■服務器背景知識19)簡單的服務器20)簡單的客戶端21)數(shù)據(jù)報套接字Socket22)阻塞23)selectO-多路同步I/O24)參考資料什么是socket?你經(jīng)曲聽到人們談論著“socket”,或許你還不知道它的確切含義?,F(xiàn)在讓我告訴你:它是使用標準Unix文件描述符(filedescriptor)和英它程序通訊的方式。什么?你也許聽到—?些Unix高手(hacker)這樣說過:“呀,Unix中的一切就是文件!”那個家伙也許正在說到一個事實:Unix程序在執(zhí)行任何形式的I/O的時候,程序是在讀或者
4、寫一個文件描述符。一個文件描述符只是一個和打開的文件相關聯(lián)的整數(shù)。但是(注意后而的話),這個文件可能是一個網(wǎng)絡連接,F(xiàn)IFO,管道,終端,磁盤上的文件或者什么其它的東西。Unix中所有的東西就是文件!所以,你想和Internet±別的程序通訊的時候,你將要使用到文件描述符。你必須理解剛才的話?,F(xiàn)在你腦海中或許冒出這樣的念頭:“那么我從哪里得到網(wǎng)絡通訊的文件描述符呢?”,這個問題無論如何我都要冋答:你利用系統(tǒng)調用socketO,它返冋套接字描述符(socketdescriptor),然后你再通過它來進行send()和recv()調用。"但是你可能有很大的疑惑,“如果它
5、是個文件描述符,那么為什么不用一般調用readO^Uw「ite()來進行套接字通訊?"簡單的答案是:“你可以使用!”。詳細的答案是「?你可以,但是使用send()和recvOil:你更好的控制數(shù)據(jù)傳輸?!贝嬖谶@樣一個情況:在我們的[比界上,有很多種套接字。wDARPAInternet地址(Internet套接字),本地節(jié)點的路徑名(Unix套接字),CCITTX.25地址(你可以將X.25套接字完全忽略)。也許在你的Unix機器上還有其它的。我們在這里只講第一?種:Internet套接字。Internet套接字的兩種類型什么意思?有兩種類型的Internet套接字?
6、是的。不,我在撒謊。其實述有很多,但是我可不想嚇著你。我們這里只講兩種。除了這些,我打算另外介紹的“RawSockets“也是非常強大的,很值得杳閱。那么這兩種類型是什么呢?一種是"StreamSockets*'(流格式),另外種是"DatagramSockets”(數(shù)據(jù)包格式)。我們以后談到它們的時候也會用到”SOCK_STREAM”和”SOCK_DGRAM”。數(shù)據(jù)報套接字有時也叫“無連接套接字"(如果你確實要連接的吋候可以用connect()o)流式套接字是可靠的雙向通訊的數(shù)據(jù)流。如果你向套接字按順序輸出“1,2”,那么它們將按順序“1,2”到達另…邊。它們是無
7、錯誤的傳遞的,有自L1的錯誤控制,在此不討論。有什么在使用流式套接字?你町能聽說過telnet,不是嗎?它就使用流式套接字。你需要你所輸入的字符按順序到達,不是嗎?同樣,WWW瀏覽器使用的HTTP協(xié)議也使用它們來下載頁面。實際上,當你通過端口80telnet到一個WWW站點,然后輸入“GETpagcnamcT的時候,你也可以得到HTML的內容。為什么流式套接字可以達到高質量的數(shù)據(jù)傳輸?這是因為它使用了“傳輸控制協(xié)議(TheTransmissionControlProtocol)”,也叫「TCP”(請參考RFC-793獲得詳細資料。)TCP控制你的數(shù)據(jù)按順序到達并