【python】TCP协议编程
?TCP協(xié)議適用于對效率要求相對較低而準確性要求很高的場合,例如文件傳輸、電子郵件等等,需要建立連接、數(shù)據(jù)傳輸、斷開連接三個步驟。
例:TCP通信程序。模擬機器人聊天軟件原理,服務(wù)端提前建立好字典,然后根據(jù)接收到的內(nèi)容自動回復(fù)。
?客戶端代碼chatClient.py
import socket import sys# 服務(wù)端主機IP地址和端口號 HOST = '127.0.0.1' PORT = 50007 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try:# 連接服務(wù)器s.connect((HOST, PORT)) except Exception as e:print('Server not found or not open')sys.exit()while True:c = input('Input the content you want to send:')# 發(fā)送數(shù)據(jù)s.sendall(c.encode())# 從服務(wù)端接收數(shù)據(jù)data = s.recv(1024).decode()print('Received:', data)if c.lower() == 'bye':break # 關(guān)閉連接 s.close()?服務(wù)器端代碼chatServer.py
import socket from os.path import commonprefixwords = {'how are you?':'Fine,thank you.','how old are you?':'38','what is your name?':'Dong FuGuo',"what's your name?":'Dong FuGuo','where do you work?':'University','bye':'Bye'}HOST = '' PORT = 50007 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 綁定socket s.bind((HOST, PORT)) # 開始監(jiān)聽一個客戶端連接 s.listen(1) print('Listening on port:',PORT)conn, addr = s.accept() print('Connected by', addr) # 開始聊天 while True:data = conn.recv(1024).decode()if not data:breakprint('Received message:', data)# 盡量猜測對方要表達的真正意思m = 0key = ''for k in words.keys():# 刪除多余的空白字符data = ' '.join(data.split())# 與某個“鍵”非常接近,就直接返回if len(commonprefix([k, data])) > len(k)*0.7:key = kbreak# 使用選擇法,選擇一個重合度較高的“鍵”length = len(set(data.split())&set(k.split()))if length > m:m = lengthkey = k# 選擇合適的信息進行回復(fù)conn.sendall(words.get(key, 'Sorry.').encode()) conn.close() s.close()? 先運行chatServer.py,監(jiān)聽客戶端連接
?然后在dos窗口中,打開?chatClient.py所在的文件夾,輸入python?chatClient.py? +(發(fā)送內(nèi)容)回車,完成發(fā)送數(shù)據(jù)。
啟動一個命令提示符環(huán)境并運行服務(wù)端程序,服務(wù)端開始監(jiān)聽;啟動一個新的命令提示符環(huán)境并運行客戶端程序,服務(wù)端提示連接已建立;在客戶端輸入要發(fā)送的信息后,服務(wù)端會根據(jù)提前建立的字典來自動回復(fù)。服務(wù)端每次都在固定的端口進行監(jiān)聽,而客戶端每次建立連接時可能會使用不同的端口。如果服務(wù)端程序沒有運行,那么客戶端就無法建立連接,當(dāng)然也無法發(fā)送任何信息,這正是TCP協(xié)議區(qū)別于UDP協(xié)議的地方。
總結(jié)
以上是生活随笔為你收集整理的【python】TCP协议编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数字图像处理学习路线
- 下一篇: Python ctypes模块调用API