Python 2.7:侦听请求的连接+;同时侦听已建立的连接
我目前正在尝试制作聊天室服务器。我正试图做到这一点,这样我就可以同时监听新请求的连接和已建立的连接发送的消息 我可以用它来监听请求的连接:Python 2.7:侦听请求的连接+;同时侦听已建立的连接,python,python-2.7,networking,server,Python,Python 2.7,Networking,Server,我目前正在尝试制作聊天室服务器。我正试图做到这一点,这样我就可以同时监听新请求的连接和已建立的连接发送的消息 我可以用它来监听请求的连接: def reqlisten(): global hostlist while True: conn, address = (sock.accept) hostlist.append(conn) print 'Recieved connection form', address def mesl
def reqlisten():
global hostlist
while True:
conn, address = (sock.accept)
hostlist.append(conn)
print 'Recieved connection form', address
def meslisten():
global hostlist
while True:
ready_socks,_,_ = select.select(hostlist, [], [])
for sock in ready_socks:
data, addr = sock.recvfrom(255)
print 'Received message:', data
broadcast(message)
print 'Broadcasting message.'
我可以用它来监听从已经建立的连接发送的消息:
def reqlisten():
global hostlist
while True:
conn, address = (sock.accept)
hostlist.append(conn)
print 'Recieved connection form', address
def meslisten():
global hostlist
while True:
ready_socks,_,_ = select.select(hostlist, [], [])
for sock in ready_socks:
data, addr = sock.recvfrom(255)
print 'Received message:', data
broadcast(message)
print 'Broadcasting message.'
但是我如何同时做这两件事呢?有多种方法可以做到这一点
hostlist = []
def Accept(sock):
##Accept one connection at a time
conn,address = sock.accept()
print "accept",address
conn.setblocking(0)
hostlist.append(conn)
def Recv(sock):
data,addr = sock.recvfrom(255)
print "recv",data
if __name__ == "__main__":
listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.bind((socket.gethostname(),4041))
listen_socket.setblocking(0)
listen_socket.listen(5)
hostlist.append(listen_socket)
while True:
ready_socks,_,_ = select.select(hostlist, [], [])
for sock in ready_socks:
if sock == listen_socket:
Accept(sock)
else:
Recv(sock)
您可能需要为非阻塞套接字添加一些异常处理eWoldBlock错误条件