python中的通知套接字服务器

时间:2017-11-10 18:40:57

标签: python

我想编写一个非常基本的python应用程序,它将侦听tcp端口。 当客户端连接到此服务器时,我希望服务器向客户端发送通知(几个字节),并检测客户端是否已关闭连接。

我不希望客户端发送数据。客户端将在嵌入式设备(wifi)上,我希望保持电池寿命。

  1. 我想在服务器上检测是否关闭了与客户端的连接。 (我想协议栈中有一些握手可以告诉我链接是否有效?)

  2. 我想确保socket.send是线程安全的。 send_notification方法可以被另一个线程调用。因此,如果我同时发送PING和NOTIFICATION,客户是否应该收到PINOTIFICATIONNG之类的内容?

  3. 有我的源代码:

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

    由于

0 个答案:

没有答案