TCP服务端实现并发
生活随笔
收集整理的這篇文章主要介紹了
TCP服务端实现并发
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
socket 在 tcp 協議下通信
客戶端import socket ? # 創建客戶端TCP協議通信 c = socket.socket() # 與指定服務端握手 c.connect(('127.0.0.1', 8080)) ? # 通信循環 while True:# 向服務端發送信息msg = input('>>>')if len(msg) == 0:continuec.send(msg.encode('utf-8'))# 接受服務端信息data = c.recv(1024)print(data.decode('utf-8'))
?
普通服務端import socket ? # 創建服務端TCP通信 s = socket.socket() # 綁定ip+port s.bind(('127.0.0.1', 8080)) s.listen(5) ? # 連接循環 while True:# 接收用戶端管道和地址conn, addr = s.accept()print(addr)# 通信循環while True:# 客戶端若異常退出會報錯,try一下try:# 接收客戶端發送的信息data = conn.recv(1024)if len(data) == 0:break# 在服務端打印出來print(data.decode('utf-8'))# 轉大寫發給服務端 conn.send(data.upper())except ConnectionResetError:break# 客戶端退出 服務端則關閉連接通道conn.close() 此時服務端每次只能服務一個用戶,因為建立連接與接受信息是同一個人在干活,要想建立另外一個連接需要先斷開正在連接的這個用戶 所以實現socket并發的思路是: 讓建立連接與接受信息分開干活
?
并發服務端(線程下的實現方法)import socket from threading import Thread ? # 創建TCP協議socket通信對象 s = socket.socket() s.bind(('127.0.0.1', 8080)) s.listen(5) ? # 創建循環通信的子線程 def communication(conn, addr):while True:try:data = conn.recv(1024)print(data.decode('utf-8'))msg = input('>>>:')if len(msg) == 0:continueconn.send(msg.encode('utf-8'))except ConnectionResetError as e:print(e,addr)breakconn.close() ? ? # 創建連接循環 while True:conn, addr = s.accept()# print(conn)print(addr)# 創建子線程,t = Thread(target=communication, args=(conn,addr))t.start()
?
??
轉載于:https://www.cnblogs.com/waller/p/11352073.html
總結
以上是生活随笔為你收集整理的TCP服务端实现并发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 申请办理原产地证需要哪些资料?
- 下一篇: 问题 1052: [编程入门]链表合并