建立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秒為預設值,如果應用程式想自定義乙...