本篇文章對Linux的SOCKET編程進(jìn)行了詳細(xì)解釋,文章后面分享了一個編程實例供大家學(xué)習(xí)。
1. 網(wǎng)絡(luò)中進(jìn)程之間如何通信
進(jìn)程通信的概念最初來源于單機(jī)系統(tǒng)。由于每個進(jìn)程都在自己的地址范圍內(nèi)運行,為保證兩個相互通信的進(jìn)程之間既互不干擾又協(xié)調(diào)一致工作,操作系統(tǒng)為進(jìn)程通信提供了相應(yīng)設(shè)施,如
UNIX BSD有:管道(pipe)、命名管道(named pipe)軟中斷信號(signal)
UNIX system V有:消息(message)、共享存儲區(qū)(shared memory)和信號量(semaphore)等.
他們都僅限于用在本機(jī)進(jìn)程之間通信。網(wǎng)間進(jìn)程通信要解決的是不同主機(jī)進(jìn)程間的相互通信問題(可把同機(jī)進(jìn)程通信看作是其中的特例)。為此,首先要解決的是網(wǎng)間進(jìn)程標(biāo)識問題。同一主機(jī)上,不同進(jìn)程可用進(jìn)程號(process ID)唯一標(biāo)識。但在網(wǎng)絡(luò)環(huán)境下,各主機(jī)獨立分配的進(jìn)程號不能唯一標(biāo)識該進(jìn)程。例如,主機(jī)A賦于某進(jìn)程號5,在B機(jī)中也可以存在5號進(jìn)程,因此,“5號進(jìn)程”這句話就沒有意義了。 其次,操作系統(tǒng)支持的網(wǎng)絡(luò)協(xié)議眾多,不同協(xié)議的工作方式不同,地址格式也不同。因此,網(wǎng)間進(jìn)程通信還要解決多重協(xié)議的識別問題。
其實TCP/IP協(xié)議族已經(jīng)幫我們解決了這個問題,網(wǎng)絡(luò)層的“ip地址”可以唯一標(biāo)識網(wǎng)絡(luò)中的主機(jī),而傳輸層的“協(xié)議+端口”可以唯一標(biāo)識主機(jī)中的應(yīng)用程序(進(jìn)程)。這樣利用三元組(ip地址,協(xié)議,端口)就可以標(biāo)識網(wǎng)絡(luò)的進(jìn)程了,網(wǎng)絡(luò)中的進(jìn)程通信就可以利用這個標(biāo)志與其它進(jìn)程進(jìn)行交互。
使用TCP/IP協(xié)議的應(yīng)用程序通常采用應(yīng)用編程接口:UNIX BSD的套接字(socket)和UNIX System V的TLI(已經(jīng)被淘汰),來實現(xiàn)網(wǎng)絡(luò)進(jìn)程之間的通信。就目前而言,幾乎所有的應(yīng)用程序都是采用socket,而現(xiàn)在又是網(wǎng)絡(luò)時代,網(wǎng)絡(luò)中進(jìn)程通信是無處不在,這就是我為什么說“一切皆socket”。
2. 什么是TCP/IP、UDP
   TCP/IP(Transmission Control Protocol/Internet Protocol)即傳輸控制協(xié)議/網(wǎng)間協(xié)議,是一個工業(yè)標(biāo)準(zhǔn)的協(xié)議集,它是為廣域網(wǎng)(WANs)設(shè)計的。   
TCP/IP協(xié)議存在于OS中,網(wǎng)絡(luò)服務(wù)通過OS提供,在OS中增加支持TCP/IP的系統(tǒng)調(diào)用――Berkeley套接字,如Socket,Connect,Send,Recv等
UDP(User Data Protocol,用戶數(shù)據(jù)報協(xié)議)是與TCP相對應(yīng)的協(xié)議。它是屬于TCP/IP協(xié)議族中的一種。如圖:

TCP/IP協(xié)議族包括運輸層、網(wǎng)絡(luò)層、鏈路層,而socket所在位置如圖,Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層。

3. Socket是什么
1、socket套接字:
     socket起源于Unix,而Unix/Linux基本哲學(xué)之一就是“一切皆文件”,都可以用“打開open 
主站蜘蛛池模板:
时尚|
宁津县|
响水县|
奉贤区|
泸水县|
马龙县|
安顺市|
西乌|
天柱县|
庄河市|
井研县|
富阳市|
宜兰县|
阜平县|
望奎县|
武夷山市|
施秉县|
德清县|
永昌县|
泰和县|
烟台市|
井研县|
长春市|
广灵县|
张掖市|
慈溪市|
上蔡县|
临桂县|
楚雄市|
景宁|
稷山县|
丹巴县|
武山县|
江孜县|
无极县|
城固县|
乌兰浩特市|
和顺县|
灯塔市|
泸水县|
邛崃市|