標籤:分享圖片 nbsp connect 編程 coding str bubuko color 連結
tcp通訊模型
tcp伺服器
在程式中,如果想要完成一個tcp伺服器的功能,需要的流程如下:
- socket建立一個通訊端
- bind綁定ip和port
- listen使通訊端變為可以被動連結
- accept等待用戶端的連結
- recv/send接收發送資料
一個很簡單的tcp伺服器如下:
#coding=utf-8from socket import *# 建立sockettcpSerSocket = socket(AF_INET, SOCK_STREAM)# 綁定本地資訊address = (‘‘, 7788)tcpSerSocket.bind(address)# 使用socket建立的通訊端預設的屬性是主動的,使用listen將其變為被動的,這樣就可以接收別人的連結了tcpSerSocket.listen(5)# 如果有新的用戶端來連結的伺服器,那麼就產生一個新的通訊端專門為這個用戶端伺服器# newSocket用來為這個用戶端服務# tcpSerSocket就可以省下來專門等待其他新用戶端的連結newSocket, clientAddr = tcpSerSocket.accept()# 接收對方發送過來的資料,最大接收1024個位元組recvData = newSocket.recv(1024)print ‘接收到的資料為:‘,recvData# 發送一些資料到用戶端newSocket.send("thank you !")# 關閉為這個用戶端服務的通訊端,只要關閉了,就意味著為不能再為這個用戶端服務了,如果還需要服務,只能再次重新串連newSocket.close()# 關閉監聽通訊端,只要這個通訊端關閉了,就意味著整個程式不能再接收任何新的用戶端的串連tcpSerSocket.close()tcp用戶端tcp用戶端構建流程
tcp的用戶端要比伺服器端簡單很多,如果說伺服器端是需要自己買手機、查手機卡、設定鈴聲、等待別人打電話流程的話,那麼用戶端就只需要找一個電話亭,拿起電話撥打即可,流程要少很多
範例程式碼:
#coding=utf-8from socket import *# 建立sockettcpClientSocket = socket(AF_INET, SOCK_STREAM)# 連結的伺服器serAddr = (‘192.168.1.102‘, 7788)tcpClientSocket.connect(serAddr)# 提示使用者輸入資料sendData = raw_input("請輸入要發送的資料:")tcpClientSocket.send(sendData)# 接收對方發送過來的資料,最大接收1024個位元組recvData = tcpClientSocket.recv(1024)print ‘接收到的資料為:‘,recvData# 關閉通訊端tcpClientSocket.close()
python網路編程(六)