非阻塞套接字

2021-09-24 06:21:05 字數 1076 閱讀 2536

建立socket服務端

server = socket.socket()
設定非阻塞

server.setblocking(false)
繫結ip和埠

server.bind(('',6969))
監聽

server.listen(5)
存放連線進來的客戶端

client_list =
accept()和recv()方法,設定非阻塞後,在沒有資料到達時會引發blockingioerror,需要用try捕獲。

設定乙個大迴圈,用於不斷接收來自不同使用者的連線請求。

while true:

try:

conn.addr = server.accept()

conn.setblocking(false)

設定多使用者連入時非阻塞。

print('連線:{}'.format(addr))

except blockingioerror:

pass

for client,addr in client_list:

輪詢客戶端是否傳送資料:

try:
捕獲recv引發的異常

recv_data = client.recv(1024)

if recv_data:

print('接收來自:{}>>>{}'.format(addr,recv_data.decode('utf-8'))')

client.send(recv_data)

發回資料

else:

client_list.remove((client,addr))

刪除列表中的客戶端

client.close()

except blockingioerror:

pass

非阻塞套接字

開始之前,需要先了解一下什麼會引起程序阻塞和喚醒的事件 1 向系統請求共享資源失敗。程序在向系統請求共享資源時,由於系統已無足夠的資源分配給它,此時程序因不能繼續執行而轉變為阻塞狀態。2 等待某種操作的完成。當程序啟動某種操作後,如果該程序必須在該操作完成之後才能繼續執行,則先將該程序阻塞起來以等待...

同步,非同步,阻塞套接字,非阻塞套接字

同 步指的是 傳送方不等接收方響 應,便接著 發下個資料報的通訊方式 異 步指傳送方 發出資料後,等收到接收方 發回的響應,才 發下乙個資料報的通訊方式。阻塞套接字是指執 行此套接字的網路呼叫 時,直到成功才返回,否 則一直阻塞在此網 絡呼叫上,比如呼叫 recv 函式讀 取網路緩 沖區中的資料,如...

非阻塞 connect套接字

非阻塞connect套接字的作用 1 完成乙個connect要花費rtt時間,而rtt波動範圍很大,從區域網上的幾個毫秒甚至是廣域網上的幾秒,這段時間也許有我們要執行的其他處理工作可以執行。2 可以使用這個技術同事建立多個連線。3 許多connect的超時實現以75秒為預設值,如果應用程式想自定義乙...