Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过套接字关闭服务器时通知客户端_Python_Sockets - Fatal编程技术网

Python 通过套接字关闭服务器时通知客户端

Python 通过套接字关闭服务器时通知客户端,python,sockets,Python,Sockets,我正在创建一个套接字程序。服务器始终侦听客户端请求并发送响应。当用户单击GUI中的按钮时,客户端将向服务器发送请求 我的问题是,当我在服务器的GUI中单击close按钮时,我想通知客户端服务器已经关闭。我提出了一个想法,创建一个新的连接到客户端,它总是监听服务器,但我认为这是在浪费资源 server.py 为True时: 尝试: 请求=client.recv(BUFSIZE).decode('utf-8') 除ConnectionResetError外: logging.info(str(cli

我正在创建一个套接字程序。服务器始终侦听客户端请求并发送响应。当用户单击GUI中的按钮时,客户端将向服务器发送请求

我的问题是,当我在服务器的GUI中单击close按钮时,我想通知客户端服务器已经关闭。我提出了一个想法,创建一个新的连接到客户端,它总是监听服务器,但我认为这是在浪费资源

server.py

为True时:
尝试:
请求=client.recv(BUFSIZE).decode('utf-8')
除ConnectionResetError外:
logging.info(str(client.getsockname())+“已退出”)
打破
例外情况除外,如e:
持续
如有要求:
尝试:
request=json.loads(请求)
response=self.\u处理请求(请求,客户端).encode()
client.send(响应)
client.py

#当用户客户端按钮
sock.send(请求)
response=sock.recv().decode()
呈现(响应)

服务器套接字关闭时会通知客户端套接字。您的客户端的
sock.recv
调用将返回一个零长度数据包,这是它执行此操作的唯一实例。

My client程序仅在用户单击GUI上的按钮时调用函数recv。我想在不点击任何按钮的情况下立即通知客户。如果没有人在监听套接字,你认为客户究竟会怎么听到你的“我要死了!”消息?你需要解开一条线来不断地听。这很容易,而且不花什么钱。被阻止等待套接字数据的线程使用0资源。