#服务端:
class Server(object):
def __init__(self,sel,sock):
self.sel = sel
self.sock = sock
def run(self,host,port):
self.sock.bind((host,port))
self.sock.listen(1000)
self.sock.setblocking(False)
self.sel.register(sock, selectors.EVENT_READ, self.accept)
while True:
events = self.sel.select() # m默认阻塞,有活动连接就返回活动连接列表
for key, mask in events:
callback = key.data # accept
callback(key.fileobj, mask)
def accept(self, sock,mask):
conn, addr = sock.accept() # Should be ready
print('accepted', conn, 'from', addr)
conn.setblocking(False)
sel.register(conn, selectors.EVENT_READ, self.read)
def read(self,conn, mask):
data = conn.recv(1024) # Should be ready
if data:
print('echoing', repr(data), 'to', conn)
conn.send(data) # Hope it won't block
else:
print('closing', conn)
sel.unregister(conn)
conn.close()
if __name__== '__main__':
sel = selectors.DefaultSelector()
sock = socket.socket()
host,port = 'localhost',10000
server_obj = Server(sel,sock)
server_obj.run(host,port)
客户端:
import socket
HOST = 'localhost'
PORT = 10000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
while True:
msg = bytes(input(">>:").strip(), encoding="utf-8")
if msg == 'q'.encode("utf-8"):
exit("退出!")
s.sendall(msg)
data = s.recv(1024)
print('Received',data.decode())
s.close()