我想编写一个非常基本的python应用程序,它将侦听tcp端口。 当客户端连接到此服务器时,我希望服务器向客户端发送通知(几个字节),并检测客户端是否已关闭连接。
我不希望客户端发送数据。客户端将在嵌入式设备(wifi)上,我希望保持电池寿命。
我想在服务器上检测是否关闭了与客户端的连接。 (我想协议栈中有一些握手可以告诉我链接是否有效?)
我想确保socket.send是线程安全的。 send_notification方法可以被另一个线程调用。因此,如果我同时发送PING和NOTIFICATION,客户是否应该收到PINOTIFICATIONNG之类的内容?
有我的源代码:
import socket
import threading
import time
class ClientThread(threading.Thread):
def __init__(self, manager, ip, port, clientsocket):
threading.Thread.__init__(self)
self.manager = manager
self.ip = ip
self.port = port
self.clientsocket = clientsocket
self.clientsocket.settimeout(1.0)
def run(self):
self.manager.clients.append(self)
while True:
try:
self.clientsocket.send("PING")
except:
break
time.sleep(5)
self.manager.clients.remove(self)
def send_notification(self):
self.clientsocket.send("NOTIFICATION")
class Manager:
def __init__(self):
self.clients = []
thread1 = threading.Thread(target=self.bg_task)
thread1.start()
def send_notification(self):
for client in self.clients:
client.send_notification()
def bg_task(self):
tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
tcpsock.bind(("",9008))
while True:
tcpsock.listen(10)
(clientsocket, (ip, port)) = tcpsock.accept()
newthread = ClientThread(self, ip, port, clientsocket)
newthread.start()
由于