腳本學(xué)堂----網(wǎng)站
python實(shí)在是太方便,太易用了,三方庫的支持又全,語法又簡單,對開發(fā)人員來說,實(shí)在是居家旅行,XXXX的必備利器。
周末研究了下python的網(wǎng)絡(luò)支持,做一下記錄,以備隨后翻閱。
python支持BSD的socket進(jìn)行網(wǎng)絡(luò)編程,其API跟C中的大同小異,先看看TCP方式的,說到網(wǎng)絡(luò)編程,肯定會設(shè)計(jì)到server和client,下面分別來看下。
TCP方式
server端
server端的socket一般流程是這樣:
1.建立一個socket(可以選擇socket類型INET,UNIX等,以及連接方式TCP/UDP)
2.使用bind公開一個端口,使得client可以方便連接
3.設(shè)置一個listen隊(duì)列的大小
4.進(jìn)入一個無限循環(huán),在此無限循環(huán)中,使用accept函數(shù)來等待客戶連接,此函數(shù)返回一個新的socket, 對應(yīng)于客戶端的socket,建立通信信道。對socket的處理一般放5.在外部單獨(dú)的函數(shù)中(并發(fā))
6.通過send()/recv()來對socket進(jìn)行讀寫操作
下面看一下例子:
client端
建立一個新的socket
使用connect函數(shù)與遠(yuǎn)程主機(jī)獲得連接
在此socket上進(jìn)行I/O操作
由代碼量可見python之簡單,想要將這個例子改造成一個文件傳輸器,估計(jì)只需要增加不到20行代碼即可。
UDP方式
UDP號稱無連接傳輸,全然沒有TCP那么復(fù)雜,三次握手,錯誤重傳之類的機(jī)制都沒有,發(fā)的只管發(fā),收得只管收,收到?jīng)]有?不知道,順序不對怎么辦?不管!就是這樣,但是速度就要比TCP高得多了。在對數(shù)據(jù)幀要求不是很高的地方,這確實(shí)是很好用的,比如網(wǎng)絡(luò)上的視頻傳輸,音頻傳輸?shù)取?/p>
server端
建立數(shù)據(jù)報(bào)形式的socket
公開一個端口,一邊客戶端連接
開始接收數(shù)據(jù)
需要注意的是,server中address元組中的引號表示可以接受任何地址來的數(shù)據(jù)報(bào),TCP例子中的則表示可以接受任意地址發(fā)起的連接。
client端
新建一個數(shù)據(jù)報(bào)socket
收發(fā)數(shù)據(jù)
文中給出的例子已經(jīng)具有網(wǎng)絡(luò)程序的基本結(jié)構(gòu),在實(shí)際應(yīng)用中,應(yīng)該自行擴(kuò)展對socket的處理,socket說到底跟文件句柄,文件描述符,管道描述符等都是一個概念,可以對其進(jìn)行I/O處理,事實(shí)上,在UNIX類系統(tǒng)中,對socket的操作跟對文件句柄的操作沒有任何形式上的差異。
聯(lián)系客服