溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

怎么在python中建立一個(gè)TCP框架

發(fā)布時(shí)間:2021-04-26 15:03:07 來(lái)源:億速云 閱讀:146 作者:Leah 欄目:編程語(yǔ)言

怎么在python中建立一個(gè)TCP框架?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

python是什么意思

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í)。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI