【python】TCP协议编程
?TCP協(xié)議適用于對(duì)效率要求相對(duì)較低而準(zhǔn)確性要求很高的場(chǎng)合,例如文件傳輸、電子郵件等等,需要建立連接、數(shù)據(jù)傳輸、斷開連接三個(gè)步驟。
例:TCP通信程序。模擬機(jī)器人聊天軟件原理,服務(wù)端提前建立好字典,然后根據(jù)接收到的內(nèi)容自動(dòng)回復(fù)。
?客戶端代碼chatClient.py
import socket import sys# 服務(wù)端主機(jī)IP地址和端口號(hào) 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)聽一個(gè)客戶端連接 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)# 盡量猜測(cè)對(duì)方要表達(dá)的真正意思m = 0key = ''for k in words.keys():# 刪除多余的空白字符data = ' '.join(data.split())# 與某個(gè)“鍵”非常接近,就直接返回if len(commonprefix([k, data])) > len(k)*0.7:key = kbreak# 使用選擇法,選擇一個(gè)重合度較高的“鍵”length = len(set(data.split())&set(k.split()))if length > m:m = lengthkey = k# 選擇合適的信息進(jìn)行回復(fù)conn.sendall(words.get(key, 'Sorry.').encode()) conn.close() s.close()? 先運(yùn)行chatServer.py,監(jiān)聽客戶端連接
?然后在dos窗口中,打開?chatClient.py所在的文件夾,輸入python?chatClient.py? +(發(fā)送內(nèi)容)回車,完成發(fā)送數(shù)據(jù)。
啟動(dòng)一個(gè)命令提示符環(huán)境并運(yùn)行服務(wù)端程序,服務(wù)端開始監(jiān)聽;啟動(dòng)一個(gè)新的命令提示符環(huán)境并運(yùn)行客戶端程序,服務(wù)端提示連接已建立;在客戶端輸入要發(fā)送的信息后,服務(wù)端會(huì)根據(jù)提前建立的字典來(lái)自動(dòng)回復(fù)。服務(wù)端每次都在固定的端口進(jìn)行監(jiān)聽,而客戶端每次建立連接時(shí)可能會(huì)使用不同的端口。如果服務(wù)端程序沒(méi)有運(yùn)行,那么客戶端就無(wú)法建立連接,當(dāng)然也無(wú)法發(fā)送任何信息,這正是TCP協(xié)議區(qū)別于UDP協(xié)議的地方。
總結(jié)
以上是生活随笔為你收集整理的【python】TCP协议编程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数字图像处理学习路线
- 下一篇: Python ctypes模块调用API