2016-02-27 68 views
1

多个客户端我想在python构建一个简单的socket服务器:接受在python socket服务器

import socket 
import threading 
import time 


def handle(conn_addr): 
    print("Someone Connected") 
    time.sleep(4) 
    print("And now I die") 


host = '' 
port = 5000 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
try: 
    s.bind((host,port)) 
except socket.error as e: 
    print(str(e)) 

s.listen(2) 

while True: 
    threading.Thread(handle(s.accept())).start() 


print("Should never be reached") 

socket服务器应该同时接受多个客户端。我试图从我的外壳由多个标签调用远程登录本地主机5000来测试其功能但是我得到的模式是

Someone Connected 
And now I die 
Someone Connected 
And now I die 

而不是

Someone Connected 
Someone Connected 
Someone Connected 

我召唤4秒内每次的内telnet命令其他所以它应该有2条连接的消息,但只有在前一个套接字断开连接后才会返回消息。为什么是这样,我该如何去解决这个问题?

+0

您正在打印die语句而不关闭套接字。客户端仍应该连接 –

+0

但是,为什么在我连接到该功能后,该功能不会打印“有人连接”?它总是等待“死”被打印? – Bula

+0

据我所知,它应该打印“连接”,然后暂停4秒,然后打印“死亡”(即使你不关闭插座)。这不是发生了什么? –

回答

1

它是一个典型的错误。你叫handle()(睡眠4秒),然后尝试从其结果创建一个线程。目标应该是一个函数引用,并且参数应该分开传递。

threading.Thread(target=handle, args=(s.accept(),)).start() 

在这个版本中,主线程等待一个accept,然后创建运行handle线程。

+0

很棒的回答 –