python網路程式設計隨筆

2021-08-23 15:24:24 字數 2147 閱讀 9827

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進行讀寫操作

好了,下面看一下例子:

def tcpserver():

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操作

def tcpclient():

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

公開乙個埠,一邊客戶端連線

開始接收資料

def udpserver():

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

收發資料

def udpclient():

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的操作跟對檔案控制代碼的操作沒有任何形式上的差異。

網路程式設計隨筆

1.udp協議 udp協議是乙個面向無連線的協議。將計算機分為傳送端和接收端。傳送端在傳送訊息之前,不用確認接收端是否存在。特點 面向無連線協議 只管傳送,不管對方是否收到。將資料以及源和目的封裝成乙個資料報。每乙個資料報大小限制64k以為。因為是無連線協議,速度快是乙個不可靠的協議。2.tcp協議...

Python 網路爬蟲隨筆

網路爬蟲之前感覺很難,但是其實看過網上一些詳細的教程之後覺得還是可以掌握一二的 最主要的原因我認為可能是因為python的相關工具包做的確實很完善,相當好用。import requests from bs4 import beautifulsoup接下來就可以使用相關函式了 url wbdata r...

python網路程式設計 TCP網路程式設計

tcp程式設計 客戶端 import socket 1 套接字 tcp socket socket.socket socket.af inet,socket.sock stream 2 建立鏈結 tcp socket.connect 172.27.35.1 8080 3 傳送資訊 tcp socke...