python 非阻塞tcp伺服器

2021-08-18 21:18:31 字數 1500 閱讀 9126

importsocket

importtime

defmain():

# 建立乙個

tcp伺服器端

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

# 復用tcp_server.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)

# 繫結tcp_server.bind(("", 8976))

# 被 動tcp_server.listen(128)

#設定非堵塞

tcp_server.setblocking(false)

#客戶端列表

clients = list()

while true:

time.sleep(1)

try:

client, addr = tcp_server.accept()

print(client)

client.setblocking(false)

#有客戶端就放入

exceptexception

ase:

print("-------沒有客戶端------")

#列表迴圈

forclient_newinclients:

try:

data = client_new.recv(1024).decode()

ifdata:

#有資料print(data)

else:

#關閉客戶端

client_new.close() #

關閉客戶端

clients.remove(client_new) #

迴圈刪除

exceptexception

ase:

print("------沒有資料-----")

tcp_server.close()

if__name__ =='__main__':

main()

非阻塞web靜態伺服器

單程序但鏈結非阻塞web靜態伺服器 author bre athy contact productware pycharm file 單程序但鏈結非阻塞web靜態伺服器.py time 2019 11 9 5 33 import socket,re defservice client new soc...

學習TCP阻塞 非阻塞

不管是阻塞還是非阻塞模式,send 返回的資料長度,只是表示拷貝到協議棧緩衝區中的資料長度,並不是實際傳送的資料量或對方接收的資料量。對於recv 只是從緩衝區中獲取接收到的資料。傳送方先將資料拷貝到協議棧緩衝區,tcp會保證緩衝區中的資料傳送到接收方的緩衝區。至於資料如何可靠的到達,底層協議已經給...

TCP非阻塞accept和非阻塞connect

非阻塞accept 當乙個已完成的連線準備好被accept的時候,select會把監聽socket標記為可讀。因此,如果用select等待外來的連線時,應該不需要把監聽socket設定為非阻塞模式,因為如果select告訴我們連線已經就緒,accept就不應該被阻塞。不過這樣做的時候有乙個bug 當...