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