日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

【python】TCP协议编程

發(fā)布時(shí)間:2023/12/14 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【python】TCP协议编程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。