Python网络编程基础

 异步模式多客户端的例子。 server.py import selectors import socket sel = selectors.DefaultSelector() def accept(sock, mask): conn, addr = sock.accept() # Should be ready print('accepted', conn,



异步模式多客户端的例子。

server.py

import selectors
import socket

sel = selectors.DefaultSelector()


def accept(sock, mask):
    conn, addr = sock.accept()  # Should be ready
    print('accepted', conn, 'from', addr)
    conn.setblocking(False)
    sel.register(conn, selectors.EVENT_READ, read)


def read(conn, mask):
    try:
        data = conn.recv(1000)  # Should be ready
    except:
        print('closing 1', conn)
        sel.unregister(conn)
        conn.close()
    else:
        if data:
            print('echoing', repr(data), 'to', conn)
            conn.send(data)  # Hope it won't block
        else:
            print('closing 2', conn)
            sel.unregister(conn)
            conn.close()


sock = socket.socket()
sock.bind((socket.gethostname(), 12345))
sock.listen(100)
sock.setblocking(False)
sel.register(sock, selectors.EVENT_READ, accept)

while True:
    '''
    第一次: 会阻塞在select()这里, 
    解除阻塞: 当客户端调用connect方法时,解除阻塞,此时callback是本代码中的accept方法, 执行完之后,又阻塞在select
    第二次: 当客户端调用send发消息时, 解除阻塞, 此时callback是本代码中的read方法
    '''
    events = sel.select()
    for key, mask in events:
        callback = key.data
        callback(key.fileobj, mask)

client1.py

import socket
import time

s = socket.socket()
host = socket.gethostname()
port = 12345

s.connect((host, port))
for i in range(20):
    time.sleep(1)
    msg = str(i)
    s.send(msg.encode('utf8'))
    print(s.recv(1024).decode('utf8'))

s.send('break'.encode('utf8'))
s.close()

client2.py

import socket
import time

s = socket.socket()
host = socket.gethostname()
port = 12345

s.connect((host, port))
for i in range(20):
    time.sleep(1)
    msg = str(i)
    s.send(msg.encode('utf8'))
    print(s.recv(1024).decode('utf8'))

s.send('break'.encode('utf8'))
s.close()
缪斯之子

Python网络编程基础   缪斯之子

  xia***_001@outlook.com

编程小号
上一篇 2024-10-01 17:25
下一篇 2024-10-01 17:25

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/75.html