第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

非阻塞的Python套接字如何接收輸入?

非阻塞的Python套接字如何接收輸入?

慕俠2389804 2022-09-13 19:38:32
如果我有這個代碼與一個解鎖套接字有關,稱為sockrecv_data = sock.recv(1024)        if recv_data:            data.outb += recv_data        else:            print('closing connection to', data.addr)            sel.unregister(sock)            sock.close()究竟發(fā)生了什么?該語句與阻止和非阻止有何不同?如果程序不等待該語句完成,那么怎么會有價值呢?recv_data = sock.recv(1024)recv_data編輯:完整的服務器代碼:import selectorsimport socketimport typeshost = "127.0.0.1"port = 65432def accept_wrapper(sock):    conn, addr = sock.accept()    print('accepted conneciton from', addr)    conn.setblocking(False)    data = types.SimpleNamespace(addr=addr, inb=b'', outb=b'')    events = selectors.EVENT_READ | selectors.EVENT_WRITE    sel.register(conn, events, data=data)def service_connection(key, mask):    sock = key.fileobj    data = key.data    if mask & selectors.EVENT_READ:        recv_data = sock.recv(1024)        if recv_data:            data.outb += recv_data        else:            print('closing connection to', data.addr)            sel.unregister(sock)            sock.close()    if mask & selectors.EVENT_WRITE:        if data.outb:            print('echoing', repr(data.outb), 'to', data.addr)            sent = sock.send(data.outb)            data.outb = data.outb[sent:]sel = selectors.DefaultSelector()lsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)lsock.bind((host, port))lsock.listen()print('listening on', (host, port))lsock.setblocking(False)sel.register(lsock, selectors.EVENT_READ, data=None)while True:    events = sel.select(timeout=None)    for key, mask in events:        if key.data is None:            # From the listening socket            accept_wrapper(key.fileobj)        else:            # Client Socket            service_connection(key, mask)
查看完整描述

1 回答

?
呼啦一陣風

TA貢獻1802條經(jīng)驗 獲得超6個贊

如果 是非阻塞的,則如果它以其他方式阻塞,它將引發(fā)。代碼周圍是否有 / 未顯示?另一個選項用于確保在調(diào)用 之前讀取要接收的數(shù)據(jù)。sockBlockingIOErrortryexceptselect.selectrecv


假設相應服務器的示例:


>>> from socket import *

>>> s=socket()

>>> s.connect(('localhost',5000))

>>> s.setblocking(0)

>>> s.recv(1024)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

BlockingIOError: [WinError 10035] A non-blocking socket operation could not be completed immediately

編輯:


使用附加代碼,僅在報告(數(shù)據(jù)準備讀取)時調(diào)用,因此不應阻塞。它將返回數(shù)據(jù)或空字符串。后者表示套接字已關閉。recvsel.selectEVENT_READrecv


查看完整回答
反對 回復 2022-09-13
  • 1 回答
  • 0 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號