php io select,Python IO多路复用之——select方案服务端和客户端代码【python源码详解】...
準備文件:
IO.py? 服務端代碼
tcp_c.py?客戶端代碼
IO.py?代碼:
from select import * #引入 select 模塊
from socket import * #引入 socket 模塊
s = socket() #實例化一個socket 對象
s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #設置端口可重用
s.bind(('0.0.0.0',8888)) #綁定端口號 8888
s.listen(5) #設置監聽隊列
rlist = [s] #設置讀列表(被動列表)
wlist = [] #設置寫列表(主動列表)
xlist = [] #設置出錯列表
while True: #循環等待客戶端連接
rs,ws,xs = select(rlist, wlist, xlist) #將三個列表托管給select 對象
for r in rs: #遍歷 讀列表(收到客戶端請求的對象)
if r is s: # 如果是 s 套接字對象接收到請求,則說明是新的用戶連接
c,addr = s.accept() #處理客戶端請求,將連接套接字賦值給 c 用戶地址賦值給 addr
print(addr,'連接至s') #打印連接提示信息
rlist.append(c) #將連接套接字添加進 讀列表,以便保持持續的連接
else: #如果不是 s 套接字對象接收的請求,則說明是已有的現成連接
data = r.recv(1024) #接收客戶端傳過來的數據
if not data:#如果沒有發送過來任何數據
r.close() #將當前套接字關閉
rlist.remove(r) #將當前套接字移除出rlist列表,使 select 不再監管此對象
else: #如果有發送過來的數據
print(data.decode()) #打印出客戶端發送過來的數據
r.send('已收到你的消息'.encode()) #給客戶端回復數據
for w in ws: #遍歷 寫列表(主動發起的列表)? 只要此列表有對象,會馬上觸發
pass #由于基本上用不到這個列表,所以此處不寫任何代碼
for x in xs: #遍歷 發生錯誤的套接字列表
pass #由于基本上用不到這個列表,所以此處不寫任何代碼
tcp_c.py代碼:
from socket import *
import time
#創建套接字
sockfd = socket(AF_INET,SOCK_STREAM)
#發起連接
server_addr = ('127.0.0.1',8888)
sockfd.connect(server_addr)
i = 0
while True:
data = input('發送>>')
#data = '哈哈'+str(i)
sockfd.send(data.encode())
data = sockfd.recv(1024)
print('接收到:',data.decode(),i)
i += 1
sockfd.close()
運行結果:
總結
以上是生活随笔為你收集整理的php io select,Python IO多路复用之——select方案服务端和客户端代码【python源码详解】...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中级通信工程师证书有什么用
- 下一篇: java layoutmanager_J