1

我有这个聊天服务器代码,消息传递基本上不起作用,我用 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
4

1 回答 1

2

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

如果从客户端接收到一条消息,该函数会将其附加到存储在一个或多个全局变量中的消息主列表中。这些变量必须在每个线程和函数中设置为全局变量才能工作请评价此评论并随时回复任何问题

于 2013-08-10T23:42:06.967 回答