您好,登錄后才能下訂單哦!
怎么在python中建立一個(gè)TCP框架?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
Python是一種跨平臺(tái)的、具有解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語(yǔ)言,其最初的設(shè)計(jì)是用于編寫(xiě)自動(dòng)化腳本,隨著版本的不斷更新和新功能的添加,常用于用于開(kāi)發(fā)獨(dú)立的項(xiàng)目和大型項(xiàng)目。
1、優(yōu)點(diǎn)
(1)應(yīng)答機(jī)制:TCP發(fā)送的每個(gè)報(bào)文段都必須得到接收方得應(yīng)答才認(rèn)為這個(gè)TCP報(bào)文段傳輸成功
(2)超時(shí)重發(fā):發(fā)送端發(fā)出一個(gè)報(bào)文段之后,就啟動(dòng)定時(shí)器,如果在定時(shí)時(shí)間內(nèi)沒(méi)有收到應(yīng)答就重新發(fā)送這個(gè)報(bào)文段
(3)錯(cuò)誤校驗(yàn):TCP會(huì)用一個(gè)校驗(yàn)的函數(shù)來(lái)檢查數(shù)據(jù)是否有錯(cuò)誤,在發(fā)送和接收的時(shí)候都會(huì)有校驗(yàn)
(4)流量管控和防阻塞管理:流量控制用來(lái)避免主機(jī)因?yàn)橄l(fā)送過(guò)快而來(lái)不及完全接受
2、搭建框架步驟
(1)導(dǎo)入模塊
(2)創(chuàng)建套接字
(3)設(shè)置地址可以重用
(4)綁定端口
(5)設(shè)置監(jiān)聽(tīng),套接字由主動(dòng)變?yōu)楸粍?dòng)
(6)接收客戶(hù)端連接
(7)接受客戶(hù)端發(fā)送的信息
(8)解碼數(shù)據(jù)并輸出
(9)關(guān)閉和當(dāng)前客戶(hù)端的連接
3、實(shí)例
# 1.導(dǎo)入模塊 import socket import threading def recv_msg(new_tcp_socket, ip_port): """ 接受信息的函數(shù) :return: """ # 這個(gè)while可以不間斷的接收客戶(hù)端信息 while True: # 7.接受客戶(hù)端發(fā)送的信息 recv_data = new_tcp_socket.recv(1024) if recv_data: # 8.解碼數(shù)據(jù)并輸出 recv_text = recv_data.decode('gbk') print('來(lái)自[%s]的信息:%s' % (str(ip_port), recv_text)) else: break # 關(guān)閉客戶(hù)端連接 new_tcp_socket.close() # 2.創(chuàng)建套接字 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 3.設(shè)置地址可以重用 tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 4.綁定端口 tcp_server_socket.bind(("", 8080)) # 5.設(shè)置監(jiān)聽(tīng),套接字由主動(dòng)變?yōu)楸粍?dòng) tcp_server_socket.listen(128) # 用一個(gè)while True來(lái)接受多個(gè)客戶(hù)端連接 while True: # 6.接收客戶(hù)端連接 new_tcp_socket, ip_port = tcp_server_socket.accept() print('新用戶(hù)[%s]連接' % str(ip_port)) # 創(chuàng)建線(xiàn)程 thread_msg = threading.Thread(target=recv_msg, args=(new_tcp_socket, ip_port)) # 子線(xiàn)程守護(hù)主線(xiàn)程 thread_msg.setDaemon(True) # 啟動(dòng)線(xiàn)程 thread_msg.start() # 調(diào)用接收函數(shù) # recv_msg(new_tcp_socket, ip_port) # tcp_server_socket.close()
關(guān)于怎么在python中建立一個(gè)TCP框架問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。