简单的Python聊天服务器

时间:2012-10-04 21:25:22

标签: python-multithreading python-sockets

我有这个聊天服务器代码,消息传递基本上不起作用,我用telnet测试它,它不发送任何我发送回客户端。我知道客户端是连接的,事实上整个wait_for_connection()工作正常。我有一种感觉,它与我在python中对多线程的不了解有关。有人可以纠正我吗?

import socket, thread, sys

connections = []
isRunning = True

def wait_for_connection():
    while isRunning:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    s.bind(("", 1234))
    s.listen(5);
    print "Server is listening"
    con, addr = s.accept()
    print "Connected to", addr
    connections.append(con)


def loop_through_connections():
    for con in connections:
    con.setblocking(0)

while isRunning:
    for con in connections:
        data = con.recv(100)
        if not data:
            break
        for connection in connections:
            connection.send(data)


if __name__ == "__main__":
thread.start_new_thread(wait_for_connection, ())
thread.start_new_thread(loop_through_connections, ())
while isRunning:
    pass

1 个答案:

答案 0 :(得分:2)

我不太了解你的代码。我建议使用更少的线程。在主线程中添加一个接受连接的主循环,并为它接受的每个连接在连接处理函数中启动一个线程。该函数首先将阻塞设置为false,然后在循环中检查从客户端发送的数据并发送所有数据。

如果从客户端收到消息,该函数会将其附加到存储在一个或多个全局变量中的消息的主列表中。这些变量必须在每个线程中设置为全局变量并使其起作用  请对此评论进行评分,并随时回答任何问题