學習筆記 用非堵塞實現單程序單執行緒處理客戶端

2021-10-02 20:29:24 字數 1377 閱讀 6451

**不重要,主要是思想 流程

import socket

tcp_server_tcp = socket.socket (socket.af_inet, socket.sock_stream)

tcp_server_tcp.setblocking(

false

)#設定套接字為非堵塞的方式 放在bind和listen前面

tcp_server_tcp.bind((''

,6789))

#繫結ip 埠port

tcp_server_tcp.listen(

128)

#監聽client_socket_list =

list()

while

true

:try

:#有客戶端到來就不發生異常

new_socket, new_addr = tcp_server_tcp.accept(

)#來了乙個新客戶端

except exception as ret :

#沒有客戶端到來,設定了不堵塞,程式會發生異常

# print('問題是', ret)

# raise stopiteration

pass

else

:# 沒有異常,意味著有新客戶端到來

new_socket.setblocking(

false

)#設定間接套接字為非堵塞的方式

#將套接字存放在列表中

#當接收到客戶端資料,list中就不是空的,就會執行下面的for

for client_socket in client_socket_list:

try:

recv_data = client_socket.recv(

1024

)#接收每乙個客戶端發過來的資料

except exception as ret:

#如果客戶端沒有發來資料,捕獲錯誤

# raise stopiteration

pass

else

:#當收到乙個客戶端的資料,(可能是對放呼叫close,可能是有效資料)

#recv_data有資料,但是返回值是空的 說明呼叫了close,下面判斷這種情況

if recv_data:

#有有效資料

print

('資料有效'

)else

:#對方呼叫了close, 導致recv返回

client_socket.close(

) client_socket_list.remove(client_socket)

#刪除list中已經過時的套接字

#同時關閉這個套接字

單程序 單執行緒 非阻塞 長鏈結

單程序 單執行緒 非阻塞實現併發 import socket import time defmain tcp server socket socket.socket socket.af inet,socket.sock stream 新建乙個伺服器socket tcp server socket.s...

使用單程序實現socket的多工模式(非堵塞)

from socket import 建立套接字 sersocket socket af inet,sock stream 設定埠復用 sersocket.setsockopt sol socket,so reuseaddr,1 localaddr 8888 繫結ip sersocket.bind ...

學習筆記 fork實現守護程序

目標 fork的父程序作為守護程序監測子程序,如果子程序掛了,則可以實現子程序的重啟。include include include include include include include include include 共享記憶體一定要包含這個標頭檔案,否則執行會出現段錯誤 include...