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