关闭所有客户端后关闭服务器

时间:2019-02-22 16:57:32

标签: python sockets

我有一个非常基本的套接字脚本,可以向客户端发送一条消息。

服务器脚本的一部分:

while True:
    con,address=s.accept()
    con.send("Hello from server".encode())
    con.close()
s.close()

部分客户端脚本:

message = s.recv(5)
while message:
    print("Message", message.decode())
    sleep(1)
    message=s.recv(5)
s.close()

我启动了2个客户。它们都打印消息(一次5个字节),然后关闭。

但是服务器仍处于打开状态,因为它仍在等待客户端。

退出服务器while True循环的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您必须指定要在什么条件下退出服务器。通常,服务器像守护程序一样编程,即无限期运行。在python中,您已经有一种方法可以打破无限while循环-Ctrl-C触发键盘异常。否则,请考虑以下几点:

  1. 在处理了N个客户端之后,在循环内break。您将需要一个柜台并跟踪所处理的客户
  2. 在某些POSIX信号上,例如How do I capture SIGINT in Python?中的答案,通常这是守护程序很好地终止
  3. 的方式

顺便说一句,您的服务器代码可能需要重写:您当前一次只处理一个客户端,而没有并行处理。当您有许多客户时,很容易遇到行头阻塞问题。