python實在是太方便,太易用了,三方庫的支援又全,語法又簡單,對開發人員來說,實在是居家旅行,***x的必備利器。週末研究了下python的網路支援,做一下記錄,以備隨後翻閱。
python支援bsd的socket進行網路程式設計,其api跟c中的大同小異,先看看tcp方式的,說到網路程式設計,肯定會設計到server和client,分別來看下
server端的socket一般流程是這樣:
建立乙個socket(可以選擇socket型別inet,unix等,以及連線方式tcp/udp)
使用bind公開乙個埠,使得client可以方便連線
設定乙個listen佇列的大小
進入乙個無限迴圈,在此無限迴圈中,使用accept函式來等待客戶連線,此函式返回乙個新的socket, 對應於客戶端的socket,建立通訊通道。對socket的處理一般放在外部單獨的函式中(併發)
通過send()/recv()來對socket進行讀寫操作
好了,下面看一下例子:
python**
deftcpserver():
srvsock = socket.socket( socket.af_inet, socket.sock_stream)
srvsock.bind((''
, 9527
))
srvsock.listen(5
) while
true
: clisock, (remotehost, remoteport) = srvsock.accept()
"[%s:%s] connected"
% (remotehost, remoteport)
#do something on the clisock
clisock.close()
if__name__ ==
"__main__"
: tcpserver()
建立乙個新的socket
使用connect函式與遠端主機獲得連線
在此socket上進行i/o操作
python**
deftcpclient():
clisock = socket.socket(socket.af_inet, socket.sock_stream)
clisock.connect(('localhost'
, 9527
))
#i/o on this clisock
#clisock.send("")
#dat = clisock.recv(len)
dat
if__name__ ==
"__main__"
: tcpclient()
由**量可見python之簡單,想要將這個例子改造成乙個檔案傳輸器,估計只需要增加不到20行**即可。
建立資料報形式的socket
公開乙個埠,一邊客戶端連線
開始接收資料
python**
defudpserver():
address = (''
, 9527
) srvsock = socket.socket(socket.af_inet, socket.sock_dgram)
srvsock.bind(address)
#data,addr = srvsock.recvfrom(2048)
if__name__ ==
"__main__"
: udpserver()
需要注意的是,server中address元組中的引號表示可以接受任何位址來的資料報,tcp例子中的則表示可以接受任意位址發起的連線。
新建乙個資料報socket
收發資料
python**
defudpclient():
address = ('localhost'
, 9527
) clisock = socket.socket(socket.af_inet, socket.sock_dgram)
#clisock.sendto(data, address)
if__name__ ==
"__main__"
: udpclient()
文中給出的例子已經具有網路程式的基本結構,在實際應用中,應該自行擴充套件對socket的處理,socket說到底跟檔案控制代碼,檔案描述符,管道描述符等都是乙個概念,可以對其進行i/o處理,事實上,在unix類系統中,對socket的操作跟對檔案控制代碼的操作沒有任何形式上的差異。
python網路程式設計基礎
客戶 伺服器架構 伺服器 是乙個軟體或硬體,用於提供客戶需要的 服務 伺服器存在的唯一目的就是等待客戶的請求,給這些客戶服務,然後再等待其他的請求.常見的服務型別 硬體的客戶 伺服器架構 印表機,檔案伺服器 軟體客戶 伺服器架構 web伺服器,資料庫伺服器,視窗伺服器 gui 套接字 用於程序間通訊...
python網路程式設計基礎
目錄 標籤 空格分隔 網路程式設計 目錄tcp和udp tcp的使用是面向連線的,即資料的傳輸必須基於虛鏈路的完整建立。虛鏈路的建立提供了很多優秀的功能,比如確認重傳以保證資料的完整性,滑動視窗以保證資料傳輸的高效性,各類選項字段提供不同的可選功能。tcp的缺點是報頭大,因為需要包含比udp更多的功...
Python網路程式設計基礎
應用socket 的常用方法 socket 介紹 socket套接字 python 中提供了socket.py標準庫,非常底層的介面 socket是一種通用的網路程式設計介面,和網路層次沒有一一對應的關係 協議族af表示address family,用於socket 第乙個引數 名稱含義 af in...