什么是 SOCKET 你經(jīng)常聽到人們談?wù)撝?“SOCKET”,或許你還不知道它的確切含義,F(xiàn)在讓我告訴你:它是使用 標(biāo)準(zhǔn)Unix 文件描述符 (file descriptor) 和其它程序通訊的方式。 什么? 你也許聽到一些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è)問題無論如何我都要回答:你利用系統(tǒng)調(diào)用 SOCKET(),它返回套接字描述符 (SOCKET descriptor),然后你再通過它來進(jìn)行send() 和 recv()調(diào)用。 “但是...”,你可能有很大的疑惑,“如果它是個(gè)文件描述符,那么為什 么不用一般調(diào)用read()和write()來進(jìn)行套接字通訊?”簡單的答案是:“你可以使用!”。詳細(xì)的答案是:“你可以,但是使用send()和recv()讓你更好的控制數(shù)據(jù)傳輸! 存在這樣一個(gè)情況:在我們的世界上,有很多種套接字。有DARPA Internet 地址 (Internet 套接字),本地節(jié)點(diǎn)的路徑名 (Unix套接字),CCITT X.25地址 (你可以將X.25 套接字完全忽略)。也許在你的Unix 機(jī)器上還有其它的。我們在這里只講第一種:Internet 套接字。
|