多客户端服务器

时间:2017-06-04 09:46:24

标签: python sockets

我读了一些关于使用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()

0 个答案:

没有答案