我读了一些关于使用select函数而不是使用线程但我无法理解如何在我的代码中使用它。
编辑: 我尝试运行以下代码,程序打印"客户连接",但问题是它没有打印"工作"这意味着它不会向客户端发送数据。我的代码出了什么问题?
import socket
import select
SERVER_PORT = 3000
SERVER_IP = "127.0.0.1"
MESSAGE_START = 3
CONNECTION_LIST = []
server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_sock.bind((SERVER_IP, SERVER_PORT))
server_sock.listen(10)
CONNECTION_LIST.append(server_sock)
def broadcast_data (sock, message):
for socket in CONNECTION_LIST:
if socket != server_sock and socket != sock :
try :
socket.send(message)
except :
socket.close()
CONNECTION_LIST.remove(socket)
def main():
while (True):
read_sockets,write_sockets,error_sockets = select.select(CONNECTION_LIST,[],[])
for sock in read_sockets:
if sock == server_sock:
client_sock, address_sock = server_sock.accept()
CONNECTION_LIST.append(client_sock)
print "Client:"+str(address_sock)+" connected!"
broadcast_data(client_sock,"Welcome to the server")
else:
print "Working:"
ans = ""
while (True):
msg = client_sock.recv(1024)
if (msg == "Hello"):
ans = "Hey"
elif (msg == "QUIT"):
broadcast_data(client_sock,"Bye")
sock.close()
CONNECTION_LIST.remove(sock)
break
else:
ans = "Error!"
broadcast_data(client_sock,ans)
server_sock.close()
main()