电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解python tcp編程

瀏覽:3日期:2022-07-13 11:04:55

網絡連接與通信是我們學習任何編程語言都繞不過的知識點。 Python 也不例外,本文就介紹因特網的核心協議 TCP ,以及如何用 Python 實現 TCP 的連接與通信。

TCP 協議

TCP協議(Transmission Control Protocol, 傳輸控制協議)是一種面向連接的傳輸層通信協議,它能提供高可靠性通信,像 HTTP/HTTPS 等網絡服務都采用 TCP 協議通訊。那么網絡通訊方面都會涉及到 socket 編程,當然也包括 TCP 協議。

Network Socket

我們來看看定義:

Network Socket(網絡套接字)是計算機網絡中進程間通信的數據流端點,廣義上也代表操作系統提供的一種進程間通信機制。

這些計算機術語都很學術,難于理解,每個字都認識,加在一起就不認識了。我們可以通俗地理解成發快遞:A 需要給 B 寄快遞,首先需要知道 B 的地址和手機號碼,那么這個地址就相當于 網絡中的主機 IP 地址,而手機就相當于 主機的端口號。然后 A 還需要指定哪家快遞公司,是順豐還是中通?這個快遞公司就相當于通信的傳輸協議。

TCP 連接流程

上述快遞的例子中,寄快遞的我們可以叫做客戶端,收快遞的我們叫做服務器。專業點就是主動發起連接的一方叫做客戶端,被動響應的一方叫做服務器。例如,我們在瀏覽器中訪問百度搜索時,我們自己的電腦就是客戶端,瀏覽器會向百度的服務器發送連接請求,如果百度的服務器接受了我們的請求,那么一個 TCP 連接就建立起來了,后面就是百度向我們傳輸搜索結果了。

我們來看一個流程圖:

詳解python tcp編程

TCP服務器的建立可以歸納這幾步:

創建 socket(套接字) 綁定 socket 的 IP 地址和端口號 監聽客戶端的連接請求 接受客戶端的連接請求 與客戶端對話 關閉連接

TCP客戶端的創建可總結為這幾步:

創建 socket(套接字) 連接服務器 socket 與服務器對話 關閉連接

這里需要注意的是 TCP 客戶端連接到服務器的 IP 和端口號必須是 TCP 服務器的 IP 和監聽的端口號,服務器調用 listen() 開始監聽端口,然后調用 accept() 時刻準備接受客戶端的連接請求,此時服務器處于阻塞狀態,直到服務器監聽到客戶端的請求后,接收請求并建立連接為止。

TCP 客戶端

創建 socket 連接,可以這樣做:

# 導入socket庫import socket# 創建一個sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 建立連接s.connect(('127.0.0.1', 6000))

創建 socket 時,第一個參數 socket.AF_INET 表示指定使用 IPv4 協議,如果要使用 IPv6 協議,就指定為 socket.AF_INET6。SOCK_STREAM 指定使用面向流的 TCP 協議。然后我們調用 connect() 方法,傳入 IP 地址(或者域名),指定端口號就可以建立連接了。

接下來我們就可以向服務器發送數據了:

s.send(b’Hello, Mr Right!’)

接收數據時,調用 recv(max) 方法,一次最多接收指定的字節數,因此,在一個 while 循環中反復接收,直到 recv() 返回空數據,表示接收完畢,退出循環。

# 接收數據buffer = []while True: # 每次最多接收1k字節 d = s.recv(1024) if d: buffer.append(d) else: breakdata = b’’.join(buffer)

最后,我們需要關閉連接,很簡單:

s.close()

TCP 服務器

相比于客戶端,服務器端稍微復雜一些,需要先綁定一個 IP 地址和端口號,然后監聽客戶端的請求,收到請求后丟到一個線程去處理。

創建 socket 跟客戶端方法一樣:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

接下來需要綁定監聽地址和端口:

s.bind((’127.0.0.1’, 6000))

然后就可以開始監聽端口了,監聽時需要傳入一個參數,指定等待連接的最大數量:

s.listen(5)

接下來就是無限循環等待客戶端的連接,直到有連接請求過來,就用一個線程去處理:

while True: # 接受一個新連接 sock, addr = s.accept() # 創建新線程來處理TCP連接 t = threading.Thread(target=tcplink, args=(sock, addr)) t.start()

這里為什么需要多線程處理呢?想象一下菜鳥驛站,如果里面只有一個人的話,那么多個人寄件就需要排隊,一個個來;但是如果有多個人的話,那么每個人都可以處理一個寄件請求。

我們來看一下處理客戶端請求的方法:

# 處理tcp連接def tcplink(conn, addr): print('Accept new connection from %s:%s' % addr) # 向客戶端發送歡迎消息 conn.send(b'Server: Welcome!n') while True: conn.send(b'Server: What’s your name?') data = conn.recv(1024) # 如果客戶端發送 exit 過來請求退出,結束循環 if data == b'exit': conn.send(b'Server: Good bye!n') break conn.send(b'Server: Hello %s!n' % data) # 關閉連接 conn.close() print('Connection from %s:%s is closed' % addr)

例子中,我們先想客戶端發送歡迎消息,然后詢問客戶端名稱,收到名稱后發送歡迎消息,直到接收到客戶端的 ‘exit’ 命令,退出循環,關閉連接。

實例

我們把上面的分步講解代碼合并起來,形成一個可運行的實例。

服務器端代碼:

import socketimport threadingimport time# 處理tcp連接def tcplink(conn, addr): print('Accept new connection from %s:%s' % addr) # 向客戶端發送歡迎消息 conn.send(b'Server: Welcome!n') while True: conn.send(b'Server: What’s your name?') data = conn.recv(1024) # 如果客戶端發送 exit 過來請求退出,結束循環 if data == b'exit': conn.send(b'Server: Good bye!n') break conn.send(b'Server: Hello %s!n' % data) time.sleep(5) # 關閉連接 conn.close() print('Connection from %s:%s is closed' % addr)# 創建 sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 監聽端口s.bind(('127.0.0.1', 6000))# 設定等待連接的最大數量為5s.listen(5)print('Waiting for connection...')# 等待接收連接while True: # 接受一個新連接 conn, addr = s.accept() # 創建新線程來處理TCP連接 t = threading.Thread(target=tcplink, args=(conn, addr)) t.start()

客戶端代碼:

import socketimport time# 創建 sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 建立連接s.connect(('127.0.0.1', 6000))# 接收服務器消息print(s.recv(1024).decode())for data in [b’Michael’, b’Tracy’, b’Sarah’]: # 發送數據 s.send(data) time.sleep(2) # 打印接收到的數據 print(s.recv(1024).decode(’utf-8’)) time.sleep(1)time.sleep(3)# 請求退出s.send(b’exit’)time.sleep(2)print(s.recv(1024).decode(’utf-8’))# 關閉連接s.close()

注意,在代碼中,我加入了一些休眠(sleep)操作,主要是為了控制臺能夠順利打印出來,不然程序運行太快,打印順序和內容有可能和預期不一樣。

先運行服務器端代碼,然后再運行客戶端代碼,我們可以看到服務器端控制臺打印內容如下:

# 服務器端打印消息Waiting for connection...Accept new connection from 127.0.0.1:53503Connection from 127.0.0.1:53503 is closed

客戶端控制臺打印內容如下:

# 客戶端打印消息Server: Welcome!Server: What’s your name?Server: Hello Michael!Server: What’s your name?Server: Hello Tracy!Server: What’s your name?Server: Hello Sarah!Server: What’s your name?Server: Good bye!

大家可以對照著打印內容和代碼,體會一下服務器端和客戶端通信的原理。

總結

本文為大家介紹了 TCP 編程的基本原理和如何使用 Python 實現一個最簡單的 TCP 通信過程。通過介紹和實例,大家要在腦海中形成一個 TCP 通信的過程,熟悉了這個過程是處理后續復雜通信需求的基礎。

文中實例代碼

以上就是詳解python tcp編程的詳細內容,更多關于python tcp編程的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 校园文化空间设计-数字化|中医文化空间设计-党建|法治廉政主题文化空间施工-山东锐尚文化传播公司 | 定硫仪,量热仪,工业分析仪,马弗炉,煤炭化验设备厂家,煤质化验仪器,焦炭化验设备鹤壁大德煤质工业分析仪,氟氯测定仪 | BESWICK球阀,BESWICK接头,BURKERT膜片阀,美国SEL继电器-东莞市广联自动化科技有限公司 | 激光内雕_led玻璃_发光玻璃_内雕玻璃_导光玻璃-石家庄明晨三维科技有限公司 激光内雕-内雕玻璃-发光玻璃 | 道达尔润滑油-食品级润滑油-道达尔导热油-合成导热油,深圳道达尔代理商合-深圳浩方正大官网 | 分轨 | 上传文件,即刻分离人声和伴奏| 西安文都考研官网_西安考研辅导班_考研培训机构_西安在职考研培训 | DNA亲子鉴定_DNA基因检测中心官方预约平台-严选好基因网 | 户外健身路径_小区健身器材_室外健身器材厂家_价格-浩然体育 | 桁架机器人_桁架机械手_上下料机械手_数控车床机械手-苏州清智科技装备制造有限公司 | 液压升降平台_剪叉式液压/导轨式升降机_传菜机定做「宁波日腾升降机厂家」 | 冲击式破碎机-冲击式制砂机-移动碎石机厂家_青州市富康机械有限公司 | 福兰德PVC地板|PVC塑胶地板|PVC运动地板|PVC商用地板-中国弹性地板系统专业解决方案领先供应商! 福建成考网-福建成人高考网 | 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 工作心得_读书心得_学习心得_找心得体会范文就上学道文库 | 伶俐嫂培训学校_月嫂培训班在哪里报名学费是多少_月嫂免费政府培训中心推荐 | 【直乐】河北石家庄脊柱侧弯医院_治疗椎间盘突出哪家医院好_骨科脊柱外科专业医院_治疗抽动症/关节病骨伤权威医院|排行-直乐矫形中医医院 | 校车_校车价格_19座幼儿园校车_幼儿园校车_大鼻子校车 | 旋振筛|圆形摇摆筛|直线振动筛|滚筒筛|压榨机|河南天众机械设备有限公司 | 上海赞永| 高清视频编码器,4K音视频编解码器,直播编码器,流媒体服务器,深圳海威视讯技术有限公司 | 高低温万能试验机-复合材料万能试验机-馥勒仪器 | 中山市派格家具有限公司【官网】 | 盘式曝气器-微孔曝气器-管式曝气器-曝气盘-斜管填料 | 郑州市前程水处理有限公司 | 政府园区专业委托招商平台_助力企业选址项目快速落地_东方龙商务集团 | 二手电脑回收_二手打印机回收_二手复印机回_硒鼓墨盒回收-广州益美二手电脑回收公司 | 心得体会网_心得体会格式范文模板| 铁素体测量仪/检测仪/铁素体含量测试仪-苏州圣光仪器有限公司 | 千斤顶,液压千斤顶-力良企业,专业的液压千斤顶制造商,shliliang.com | 进口消泡剂-道康宁消泡剂-陶氏消泡剂-大洋消泡剂 | 制冷采购电子商务平台——制冷大市场 | 谈股票-今日股票行情走势分析-牛股推荐排行榜 | 钢衬玻璃厂家,钢衬玻璃管道 -山东东兴扬防腐设备有限公司 | 列管冷凝器,刮板蒸发器,外盘管反应釜厂家-无锡曼旺化工设备有限公司 | 3A别墅漆/3A环保漆_广东美涂士建材股份有限公司【官网】 | 口臭的治疗方法,口臭怎么办,怎么除口臭,口臭的原因-口臭治疗网 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 匀胶机旋涂仪-声扫显微镜-工业水浸超声-安赛斯(北京)科技有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 武汉森源蓝天环境科技工程有限公司-为环境污染治理提供协同解决方案 | 生态板-实木生态板-生态板厂家-源木原作生态板品牌-深圳市方舟木业有限公司 |