TCP服務端實現併發

2021-09-28 08:55:11 字數 1994 閱讀 9343

socket 在 tcp 協議下通訊

客戶端
import socket

​# 建立客戶端tcp協議通訊

c = socket.socket()

# 與指定服務端握手

c.connect(('127.0.0.1', 8080))

​# 通訊迴圈

while true:

# 向服務端傳送資訊

msg = input('>>>')

if len(msg) == 0:continue

c.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:continue

conn.send(msg.encode('utf-8'))

except connectionreseterror as e:

print(e,addr)

break

conn.close()​​

# 建立連線迴圈

while true:

conn, addr = s.accept()

# print(conn)

print(addr)

# 建立子執行緒,

t = thread(target=communication, args=(conn,addr))

t.start()

tcp協議服務端實現併發

socket 在 tcp 協議下通訊 客戶端 import socket 建立客戶端tcp協議通訊 c socket.socket 與指定服務端握手 c.connect 127.0.0.1 8080 通訊迴圈 while true 向服務端傳送資訊 msg input if len msg 0 co...

(六)多程序實現TCP服務端

首先,為什麼要用多程序處理,多程序的好處是可靠性高,而且在處理大量資料的時候,多程序的速度會比多執行緒快,所有多程序還是要掌握的。在一些實際專案中,程序和執行緒要根據實際場景用。但是多程序是不能共享程序空間的,所以有很多變數都不能共享。除了fork 之前的變數是可以共享的。下面的 基本邏輯就是,用父...

python 實現socket服務端併發的四種方式

服務端 多程序和多執行緒的開啟方式相同。缺點 1 由於cpython的gil,導致同一時間無法執行多個執行緒 2 不可能無限開進程式或執行緒 解決辦法 多程序 concurrent.futures.processpoolexecutor 執行緒池 import socket from multipr...