【问题标题】:closing the server after all clients are closed关闭所有客户端后关闭服务器
【发布时间】:2019-02-22 16:57:31
【问题描述】:

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

部分服务器脚本:

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循环的正确方法是什么?

【问题讨论】:

    标签: python sockets


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      • 1970-01-01
      • 2012-10-23
      • 2015-11-17
      • 2013-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多