本文實例為大家分享了python多線程實現(xiàn)TCP服務(wù)端的具體代碼,供大家參考,具體內(nèi)容如下
需求
1.創(chuàng)建一個TCP服務(wù)器接收服務(wù)端發(fā)送的信息并給予答復(fù)
2.以多線程方式實現(xiàn)接收客戶端信息
3.間客戶端發(fā)送的信息解碼輸出
思路分析
1.創(chuàng)建一個TCP客戶端套接字
2.寫一個接收消息的方法,可以接收客戶端消息并解碼輸出
3.客戶端被動監(jiān)聽,每有一個客戶端連接就創(chuàng)建一個子線程執(zhí)行接收消息方法
代碼實現(xiàn)
# 導(dǎo)入模塊
import socket
import threading
# 接收消息
def recv(client_socket, ip_port):
while True:
client_text = client_socket.recv(1024)
# 如果接收的消息長度不為0,則將其解碼輸出
if client_text:
print("[客戶端消息]", ip_port, ":", client_text.decode("gbk"))
# 給客戶端響應(yīng)
client_socket.send("收到\n".encode())
# 當(dāng)客戶端斷開連接時,會一直發(fā)送''空字符串,所以長度為0已下線
else:
print("客戶端", ip_port, "已下線")
client_socket.close()
break
# 程序主入口
def main():
# 創(chuàng)建TCP套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 設(shè)置端口復(fù)用
tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 綁定端口
tcp_socket.bind(("", 8080))
# 設(shè)置為被動監(jiān)聽狀態(tài),128表示最大連接數(shù)
tcp_socket.listen(128)
while True:
# 等待客戶端連接
client_socket, ip_port = tcp_socket.accept()
print("[新客戶端]:", ip_port, "已連接")
# 有客戶端連接后,創(chuàng)建一個線程將客戶端套接字,IP端口傳入recv函數(shù),
t1 = threading.Thread(target=recv, args=(client_socket, ip_port))
# 設(shè)置線程守護
t1.setDaemon(True)
# 啟動線程
t1.start()
if __name__ == '__main__':
main()
執(zhí)行結(jié)果
接收客戶端消息
響應(yīng)客戶端消息
客戶端下線后識別
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

