新聞中心
socket起源于Unix,而Unix/Linux基本哲學(xué)之一就是“一切皆文件”,對(duì)于文件用【打開】【讀寫】【關(guān)閉】模式來操作。socket就是該模式的一個(gè)實(shí)現(xiàn),socket即是一種特殊的文件,一些socket函數(shù)就是對(duì)其進(jìn)行的操作(讀/寫IO、打開、關(guān)閉)基本上,Socket 是任何一種計(jì)算機(jī)網(wǎng)絡(luò)通訊中最基礎(chǔ)的內(nèi)容。

建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁設(shè)計(jì)師等,應(yīng)用各種網(wǎng)絡(luò)程序開發(fā)技術(shù)和網(wǎng)頁設(shè)計(jì)技術(shù)配合操作的協(xié)同工作。成都創(chuàng)新互聯(lián)專業(yè)提供網(wǎng)站設(shè)計(jì)、做網(wǎng)站,網(wǎng)頁設(shè)計(jì),網(wǎng)站制作(企業(yè)站、自適應(yīng)網(wǎng)站建設(shè)、電商門戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗(yàn)的提升,我們力求做到極致!
1. 不同電腦上的進(jìn)程之間如何通信
首要解決的問題是如何唯一標(biāo)識(shí)一個(gè)進(jìn)程,否則通信無從談起!在1臺(tái)電腦上可以通過進(jìn)程號(hào)(PID)來唯一標(biāo)識(shí)一個(gè)進(jìn)程,但是在網(wǎng)絡(luò)中這是行不通的。 在網(wǎng)絡(luò)應(yīng)用程序設(shè)計(jì)時(shí),由于TCP/IP的核心內(nèi)容被封裝在操作系統(tǒng)中,如果應(yīng)用程序要使用TCP/IP,可以通過系統(tǒng)提供的TCP/IP的編程接口來實(shí)現(xiàn)。在Windows環(huán)境下,網(wǎng)絡(luò)應(yīng)用程序編程接口稱作Windows Socket。為了支持用戶開發(fā)面向應(yīng)用的通信程序,大部分系統(tǒng)都提供了一組基于TCP或者UDP的應(yīng)用程序編程接口(API),該接口通常以一組函數(shù)的形式出現(xiàn),也稱為套接字(Socket)。 其實(shí)TCP/IP協(xié)議族已經(jīng)幫我們解決了這個(gè)問題,網(wǎng)絡(luò)層的“ip地址”可以唯一標(biāo)識(shí)網(wǎng)絡(luò)中的主機(jī),而傳輸層的“協(xié)議+端口”可以唯一標(biāo)識(shí)主機(jī)中的應(yīng)用進(jìn)程(進(jìn)程)。 這樣利用ip地址,協(xié)議,端口就可以標(biāo)識(shí)網(wǎng)絡(luò)的進(jìn)程了,網(wǎng)絡(luò)中的進(jìn)程通信就可以利用這個(gè)標(biāo)志與其它進(jìn)程進(jìn)行交互
注意:
所謂
進(jìn)程指的是:運(yùn)行的程序以及運(yùn)行時(shí)用到的資源這個(gè)整體稱之為進(jìn)程(在講解多任務(wù)編程時(shí)進(jìn)行詳細(xì)講解)
所謂
進(jìn)程間通信指的是:運(yùn)行的程序之間的數(shù)據(jù)共享
后面課程中會(huì)詳細(xì)說到,像網(wǎng)絡(luò)層等知識(shí),不要著急
2. 什么是socket
socket(簡稱 套接字) 是進(jìn)程間通信的一種方式,它與其他進(jìn)程間通信的一個(gè)主要不同是:
它能實(shí)現(xiàn)不同主機(jī)間的進(jìn)程間通信,我們網(wǎng)絡(luò)上各種各樣的服務(wù)大多都是基于 Socket 來完成通信的
例如我們每天瀏覽網(wǎng)頁、QQ 聊天、收發(fā) email 等等
3. 創(chuàng)建socket
在 Python 中 使用socket 模塊的函數(shù) socket 就可以完成:
import socket
socket.socket(AddressFamily, Type)
說明:
函數(shù) socket.socket 創(chuàng)建一個(gè) socket,該函數(shù)帶有兩個(gè)參數(shù):
-
Address Family:可以選擇 AF_INET(用于 Internet 進(jìn)程間通信) 或者 AF_UNIX(用于同一臺(tái)機(jī)器進(jìn)程間通信),實(shí)際工作中常用AF_INET
-
Type:套接字類型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 協(xié)議)或者 SOCK_DGRAM(數(shù)據(jù)報(bào)套接字,主要用于 UDP 協(xié)議)
創(chuàng)建一個(gè)tcp socket(tcp套接字)
import socket
# 創(chuàng)建tcp的套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# ...這里是使用套接字的功能(省略)...
# 不用的時(shí)候,關(guān)閉套接字
s.close()
創(chuàng)建一個(gè)udp socket(udp套接字)
import socket
# 創(chuàng)建udp的套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# ...這里是使用套接字的功能(省略)...
# 不用的時(shí)候,關(guān)閉套接字
s.close()
說明
-
套接字使用流程 與 文件的使用流程很類似
-
-
創(chuàng)建套接字
-
使用套接字收/發(fā)數(shù)據(jù)
-
關(guān)閉套接字
-
當(dāng)前文章:詳解pythonsocket
文章地址:http://fisionsoft.com.cn/article/dhoiede.html


咨詢
建站咨詢
