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

2021-08-18 12:32:58 字數 1298 閱讀 9177

from socket import *

# 建立套接字

sersocket = socket(af_inet, sock_stream)

# 設定埠復用

sersocket.setsockopt(sol_socket, so_reuseaddr, 1)

localaddr = ('', 8888)

# 繫結ip

sersocket.bind(localaddr)

# 設定為監聽狀態(被動模式)

sersocket.listen(128)

# 設定為非堵塞

sersocket.setblocking(false)

# 定義乙個空列表用來儲存成功連線的客戶端資訊

clilist =

# 迴圈接收客戶端接入

while true:

# 因為已經將套接字設定為了非堵塞狀態,因此沒有客戶端接入就會丟擲異常

try:

clisocket, cliaddr = sersocket.accept()

except:

# 當沒有客戶端接入的時候丟擲的異常不做處理

pass

# 如果沒有異常就會進入else,將成功接入的客戶端新增到列表中

else:

print("[info:%s]乙個新的客戶端接入" % str(cliaddr))

# 將成功接入的客戶端也設定為非堵塞模式

clisocket.setblocking(false)

# 遍歷列表中成功連線的客戶端,當有資料的時候就列印,每次都將列表中成功連線的客戶端遍歷一邊,這些客戶端中只要有收到資料都列印出來

for clientsocket, clientaddr in clilist:

try:

recvdata = clientsocket.recv(1024)

except:

pass

else:

# 對收到的資料進行判斷,如果有值就列印

if len(recvdata) > 0:

print("%s : %s" % ((str(clientaddr), recvdata)))

else:

# 當受到的資料長度小於0說明客戶端已經關閉,這時將客戶端套接字關閉,並從列表中移除

clientsocket.close()

clilist.remove((clientsocket, clientaddr))

print("[info:%s]斷開連線" % str(clientaddr))

程序間通訊 使用socket實現

socket套接字通訊,建立兩個程序交流 第乙個程序叫做jack,他想給rose打 於是他先要去買乙個手機 建立socket 並且還要知道rose的 號碼 對方ip和埠 jack 客戶端 如下 include include include include include include inclu...

單程序的實現

1.利用事件物件實現乙個程式只允許執行乙個程序 include include include intmain printf 程式第一次執行!n getchar return0 2.建立互斥體實現乙個程式只允許允許乙個例項 程序 include include include intmain pri...

socket程式設計之單程序socket server

套接字是一種程序間的通訊的方法,不同於以往介紹的程序間通訊方法的是,它並不侷限於同一臺計算機的資源,例如檔案系統空間,共享記憶體或者訊息佇列。套接字可以認為是對管道概念的擴充套件 一台機器上的程序可以使用套接字與另一台機器上的程序通訊。因此客戶與伺服器可以分散在網路中。同一臺機器上的程序間也可以用套...