標籤:tcp編程 python
今天看了一下關於python的TCP編程。發現思路和其他語言(例如java)思路基本上差不多。
先看用戶端。基本步驟如下:
- 第一步:建立一個socket
- 第二步:建立串連
- 第三步:發送資料
- 第四步:讀取從伺服器發送過來的資料
- 第五步:關閉串連
- 第六步:對收到的資料進行處理
下面為python的TCP編程的用戶端程式的一個小例子。java中關於網路編程的博文請看這裡
#coding:utf-8#TCP編程的用戶端程式#編寫用戶端程式與其它語言(例如java)的思路差不多。如下#第一步:建立一個socketimport sockets=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#第二步:建立串連,參數是一個tuple,以訪問新浪為例s.connect((‘www.sina.com.cn‘,80))#80連接埠是Web服務的標準連接埠#第三步:發送資料s.send(b‘GET / HTTP/1.1\r\n Host:www.sina.com.cn\r\nConnection:close\n\r\n‘)#第四步:接收資料buffer=[]while True: d=s.recv(1024) #recv(max)方法,表示每次只能讀取max個位元組 if d: buffer.append(d) else: breakdate=b‘‘.join(buffer)#第五步:關閉串連s.close()#第六步:對接收到的資料進行處理#由於接收到的資料包括http頭和網頁本身,因此將其分開header,html=date.split(b‘\r\n\r\n‘,1)print(header.decode(‘utf-8‘))with open(‘sina.html‘,‘wb‘) as f: f.write(html)
下面看伺服器端的程式,思路如下
- 第一步:建立一個socket
- 第二步:綁定監聽的地址和連接埠,方法bind()只接收一個tuple
- 第三步:調用listen()方法開始監聽連接埠,傳入的參數指定等待串連的最大數量
- 第四步:伺服器程式通過一個永久迴圈來接收來自用戶端,accept()會等待並返回一個用戶端的串連
#python中的伺服器端的程式,其用來測試的用戶端程式為:tcpClient1.py#coding:utf-8import socketimport threadingdef tcplink(sock,addr): print(‘Accept new connection from %s:%s...‘%addr) sock.send(b‘welcome‘) while True: date=sock.recv(1024) if not date or date.decode(‘utf-8‘)==‘exit‘: break print(date.decode(‘utf-8‘)) sock.close() print(‘Connection from %s:%s‘%addr)#第一步:建立一個sockets=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#第二步:綁定監聽的地址和連接埠,方法bind()只接收一個tuples.bind((‘127.0.0.1‘,9999))#第三步:調用listen()方法開始監聽連接埠,傳入的參數指定等待串連的最大數量s.listen(10)#第四步:伺服器程式通過一個永久迴圈來接收來自用戶端,accept()會等待並返回一個用戶端的串連while True: sock,addr=s.accept() #建立一個新線程來處理TCP連結 threading.Thread(target=tcplink,args=(sock,addr)).start()
測試上面的伺服器端的程式,我們用一個簡單的用戶端程式來測試,如下
#為tcpServer伺服器端寫一個測試的用戶端程式#coding:utf-8import socket#第一步:建立一個sockets=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#第二步:建立串連s.connect((‘127.0.0.1‘,9999))#第三步:發送資料s.send(b‘hello World!‘)#第三步:接收資料date=s.recv(1024)print(date.decode(‘utf-8‘))
剛好前幾天系統的學習了一下git版本控制這個工具,於是,也就開始經營我的Github了,上面的代碼可在我的Github中下載,點擊這裡即可
參考地址如下:關於TCP編程的詳細介紹http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432004374523e495f640612f4b08975398796939ec3c000
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
python中的TCP編程學習