python 網路程式設計基礎

2021-09-07 21:15:14 字數 2307 閱讀 5108

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()  

print

"[%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)

print

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...