日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

基于pythonselect.select模块通信的实例讲解

發(fā)布時(shí)間:2024/10/12 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于pythonselect.select模块通信的实例讲解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

基于python select.select模塊通信的實(shí)例講解

要理解select.select模塊其實(shí)主要就是要理解它的參數(shù), 以及其三個(gè)返回值。
select()方法接收并監(jiān)控3個(gè)通信列表, 第一個(gè)是所有的輸入的data,就是指外部發(fā)過來的數(shù)據(jù),第2個(gè)是監(jiān)控和接收所有要發(fā)出去的data(outgoing data),第3個(gè)監(jiān)控錯(cuò)誤信息在網(wǎng)上一直在找這個(gè)select.select的參數(shù)解釋, 但實(shí)在是沒有, 哎...自己硬著頭皮分析了一下。?? ?
readable, writable, exceptional = select.select(inputs, outputs, inputs)
第一個(gè)參數(shù)就是服務(wù)器端的socket, 第二個(gè)是我們?cè)谶\(yùn)行過程中存儲(chǔ)的客戶端的socket, 第三個(gè)存儲(chǔ)錯(cuò)誤信息。
重點(diǎn)是在返回值, 第一個(gè)返回的是可讀的list, 第二個(gè)存儲(chǔ)的是可寫的list, 第三個(gè)存儲(chǔ)的是錯(cuò)誤信息的list。
這個(gè)也不必深究, 看看代碼自己分析下就能有大概理解。
網(wǎng)上所有關(guān)于select.select的代碼都是差不多的, 但是有些不能運(yùn)行, 或是不全。我自己重新寫了一份能運(yùn)行的程序, 做了很多注釋, 好好看看就能搞懂
服務(wù)器端:?? ?
# coding: utf-8
import select
import socket
import Queue
from time import sleep
?
?
# Create a TCP/IP
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setblocking(False)
?
# Bind the socket to the port
server_address = ('localhost', 8090)
print ('starting up on %s port %s' % server_address)
server.bind(server_address)
?
# Listen for incoming connections
server.listen(5)
?
# Sockets from which we expect to read
inputs = [server]
?
# Sockets to which we expect to write
# 處理要發(fā)送的消息
outputs = []
?
# Outgoing message queues (socket: Queue)
message_queues = {}
?
while inputs:
? # Wait for at least one of the sockets to be ready for processing
? print ('waiting for the next event')
? # 開始select 監(jiān)聽, 對(duì)input_list 中的服務(wù)器端server 進(jìn)行監(jiān)聽
? # 一旦調(diào)用socket的send, recv函數(shù),將會(huì)再次調(diào)用此模塊
? readable, writable, exceptional = select.select(inputs, outputs, inputs)
?
? # Handle inputs
? # 循環(huán)判斷是否有客戶端連接進(jìn)來, 當(dāng)有客戶端連接進(jìn)來時(shí)select 將觸發(fā)
? for s in readable:
??? # 判斷當(dāng)前觸發(fā)的是不是服務(wù)端對(duì)象, 當(dāng)觸發(fā)的對(duì)象是服務(wù)端對(duì)象時(shí),說明有新客戶端連接進(jìn)來了
??? # 表示有新用戶來連接
??? if s is server:
????? # A "readable" socket is ready to accept a connection
????? connection, client_address = s.accept()
????? print ('connection from', client_address)
????? # this is connection not server
????? connection.setblocking(0)
????? # 將客戶端對(duì)象也加入到監(jiān)聽的列表中, 當(dāng)客戶端發(fā)送消息時(shí) select 將觸發(fā)
????? inputs.append(connection)
?
????? # Give the connection a queue for data we want to send
????? # 為連接的客戶端單獨(dú)創(chuàng)建一個(gè)消息隊(duì)列,用來保存客戶端發(fā)送的消息
????? message_queues[connection] = Queue.Queue()
??? else:
????? # 有老用戶發(fā)消息, 處理接受
????? # 由于客戶端連接進(jìn)來時(shí)服務(wù)端接收客戶端連接請(qǐng)求,將客戶端加入到了監(jiān)聽列表中(input_list), 客戶端發(fā)送消息將觸發(fā)
????? # 所以判斷是否是客戶端對(duì)象觸發(fā)
????? data = s.recv(1024)
????? # 客戶端未斷開
????? if data != '':
??????? # A readable client socket has data
??????? print ('received "%s" from %s' % (data, s.getpeername()))
??????? # 將收到的消息放入到相對(duì)應(yīng)的socket客戶端的消息隊(duì)列中
??????? message_queues[s].put(data)
??????? # Add output channel for response
??????? # 將需要進(jìn)行回復(fù)操作socket放到output 列表中, 讓select監(jiān)聽
??????? if s not in outputs:
????????? outputs.append(s)
????? else:
??????? # 客戶端斷開了連接, 將客戶端的監(jiān)聽從input列表中移除
??????? # Interpret empty result as closed connection
??????? print ('closing', client_address)
??????? # Stop listening for input on the connection
??????? if s in outputs:
????????? outputs.remove(s)
??????? inputs.remove(s)
??????? s.close()
?
??????? # Remove message queue

轉(zhuǎn)載于:https://www.cnblogs.com/amengduo/p/9586311.html

總結(jié)

以上是生活随笔為你收集整理的基于pythonselect.select模块通信的实例讲解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕免 | 一区二区免费在线观看 | 自拍偷拍亚洲欧洲 | 精品成人 | 国产精品日韩 | 黄色日批| 香蕉中文网 | 日韩一区二区三区免费在线观看 | 国产精品无码电影 | 看片网址国产福利av中文字幕 | 最新地址在线观看 | 全部孕妇毛片 | 欧美午夜一区 | 国产高清一二三区 | 欧美人与性囗牲恔配 | 日韩国产电影 | 亚洲中文字幕97久久精品少妇 | 蜜桃视频一区二区三区在线观看 | 亚洲男人天堂2019 | 台湾a级艳片潘金莲 | 色综合啪啪| 狂野欧美性猛交blacked | 超碰www | 开心激情五月网 | av导航大全| 天天综合日日夜夜 | 一区二区午夜 | 日韩av第一页 | 欧美在线一卡 | 日本免费网址 | 在线观看不卡的av | 久久久精品美女 | 成人黄色小说在线观看 | 亚洲高清在线一区 | 无码人妻精品一区二区三应用大全 | 午夜精品久久久久久久91蜜桃 | 一个色在线视频 | 亚洲精品国产欧美在线观看 | 一区二区天堂 | 国产精品一区二区在线免费观看 | 久久综合久久鬼色 | 日韩在线一级片 | 91偷拍精品一区二区三区 | 国产精品国产三级国产专播品爱网 | av中文在线资源 | 伊人青青草原 | 伊人一二三 | 日本三级免费网站 | 朝桐光在线视频 | www.av.cn| 一级人爱视频 | 天天精品 | 在线免费观看污视频 | 中国美女一级看片 | 中文字幕一区二 | 亚洲视频在线免费播放 | 国产日产亚洲精品 | 日韩麻豆视频 | 亚洲第一大网站 | 成人影视免费观看 | 国产夫妻在线视频 | 欧美日韩一区二区区 | 天堂视频在线 | 精品二区视频 | 91国偷自产一区二区三区女王 | 国产精品乱码一区二三区小蝌蚪 | 污污的视频在线观看 | 黄色一区二区三区 | 色插综合| 日韩av片在线看 | 亚洲精品一区二 | 日本黄色大片视频 | 午夜国产一区 | 黄色男同视频 | 日本美女黄色大片 | 五月婷婷天堂 | 亚洲视频一区二区三区在线观看 | www亚洲国产 | 99久99 | 中文天堂在线资源 | 91久久精品国产91久久性色tv | 伊人国产视频 | 欧美日韩国产成人精品 | 天天操欧美 | 朝鲜美女黑毛bbw | 国产午夜精品一区二区 | 成年人一级黄色片 | 女女同性被吸乳羞羞 | 国产美女自慰在线观看 | 日本免费爱爱视频 | 91久久综合 | 中文字幕在线观看网站 | 免费的黄色av | 久久久麻豆 | 成人在线看片 | 天堂影视在线观看 | 天天躁日日躁狠狠躁av | 欧美激情 在线 | 欧美激情精品久久久久久蜜臀 |