在python套接字服务器中接受多个客户端

时间:2016-02-27 15:55:54

标签: python sockets

我正在尝试在python中构建一个简单的套接字服务器:

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")

套接字服务器应该同时接受多个客户端。我尝试通过从我的shell中的多个选项卡调用telnet localhost 5000来测试其功能,但是我获得的模式是

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

而不是

Someone Connected
Someone Connected
Someone Connected

我在4秒内调用telnet命令,因此它应该有2条连续连接的消息,但是只有在前一个套接字断开后才会返回消息。为什么会这样,我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:2)

这是一个经典的错误。你打电话给handle()(睡了4秒钟),然后尝试从结果中创建一个线程。目标应该是一个函数引用,args应该单独传递。

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

在此版本中,主线程等待accept,然后创建运行handle的线程。