2012-10-04 84 views
1

我有这个聊天服务器代码和消息传递基本上不起作用,即时通讯测试它与远程登录,它不发送任何我发回给客户端。我知道客户端已连接,事实上整个wait_for_connection()工作正常。我有一种感觉,它与我在python中多线程的不良知识有关。有人能纠正我吗?简单的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 

回答

2

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

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