tcp協議服務端實現併發

2021-10-23 20:19:43 字數 2185 閱讀 4659

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)

​# 建立迴圈通訊的子執行緒

defcommunication

(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 con...

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

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

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

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