在網絡編程領域(注意不是Web編程),幾乎每天都與socket打交道。然而不知如何,國人竟把socket翻譯成了“套接字”。socket的原意是指電源插座,而“套接字”為何物?
雖然這種翻譯已經被絕大多數國人認可,可這也恰恰給網絡編程的入門及其本質的理解造成了難以理解的巨大惡果。還是先讓我們來看看插座吧。
對于電源插座,相信大家都不會陌生了。看看下面這個再簡單不過的生活經歷:
小王裝修房子,第一天,為了用電,必須找一根電纜從變電站把電引入家中。也就是家里用電的總來源要有啊。
第二天,小王買來了電冰箱,為了給電冰箱供電,必須先買一個插座,并把插座接到第一天引入的電源線上。剩下來就簡單了,因為有了插座(socket),把冰箱的電源插頭插入就OK了。
第三天,熱愛計算機的小王買來了心愛的電腦,可這下就犯愁了,怎么供電呢?好辦,又買了一個插座(socket)并接到電源線上,把電腦的插頭插入socket,電腦終于可以正常使用了。
第四天,小王又買來了電視機,同樣一個socket,又讓電視機順利地工作了。
第五天,第六天...按照同樣的方法,小王通過一個又一個的插座(socket),完成了所有電器的供電。
看完了這個例子,再想想網絡編程,簡直是如出一轍。
為了連上網絡,必須要有網卡(總電源),這樣網絡上的數據便可以到達你的計算機了。可是你的應用程序如何取得這些網絡數據呢,很簡單,建立一個socket,并連到網卡上,好了這下你就可以從插座里取得信息了。無論何時你想取得網絡數據只需連接一個socket即可。
看看,socket這個詞,用到網絡編程API上是何等的形象!足見創始人對網絡編程模型的準確把握和良苦用心。然而我們的翻譯者卻把這么好的一個術語弄成了“套接字”,本來很簡單直觀的網絡編程被蒙上了一層復雜深奧的迷霧。
注意:當然網絡編程中的Socket與電源插座有一定的差別,網絡中的socket種類和功能更多更強,但是其本質是一樣的。按照插座來理解網絡編程,將非常的自然清晰。