Python實現TCP服務端的並發


服務端的三個條件:
1、有固定的IP和PORT。
2、24小時不間斷提供服務。
3、能夠支持並發。

服務端
# encoding=utf-8 # auther:lsj # 服務端

from multiprocessing import Process from threading import Thread import socket """ 服務端的三個條件: 1、有固定的IP和PORT。 2、24小時不間斷提供服務。 3、能夠支持並發。 """ server = socket.socket()  # 括號內不加參數默認就是TCP協議
server.bind(('127.0.0.1',8080)) server.listen(5) # 鏈接循環
while True: conn, addr = server.accept() # 通訊循環
    while True: try: data = conn.recv(1024) # 針對mac linux客戶端斷開鏈接后
            if len(data) == 0:break
            print(data.decode('utf8')) conn.send(data.upper()) except ConnectionResetError as e: print(e) break conn.close()

客戶端

# encoding=utf-8 # auther:lsj # 客戶端1

import socket client = socket.socket() client.connect(('127.0.0.1',8080)) while True: client.send(b'hello world') data = client.recv(1024) print(data.decode('utf-8'))

第一步:啟動服務端。

第二步:啟動一個客戶端,看效果,服務端和客戶端一直運行。

第三步:再啟動一個客戶端,看到該客戶端無任何反應。

  針對上面第三步出現的問題對服務端進行改進。

# encoding=utf-8 # auther:lsj # 服務端

from multiprocessing import Process from threading import Thread import socket """ 服務端的三個條件: 1、有固定的IP和PORT。 2、24小時不間斷提供服務。 3、能夠支持並發。 """ server = socket.socket()  # 括號內不加參數默認就是TCP協議
server.bind(('127.0.0.1',8080)) server.listen(5) # 將服務的代碼單獨封裝成一個函數
def talk(conn): # 通訊循環
    while True: try: data = conn.recv(1024) # 針對mac linux客戶端斷開鏈接后
            if len(data) == 0:break
            print(data.decode('utf8')) conn.send(data.upper()) except ConnectionResetError as e: print(e) break conn.close() # 鏈接循環
while True: conn, addr = server.accept()  # 接客
    # t = Thread(target=talk,args=(conn,)) # 叫其他人來服務客戶(線程版)
    t = Process(target=talk,args=(conn,))  # 叫其他人來服務客戶(線程版)
    t.start()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM