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