从客户端接收并保存到列表的线程化UDP服务器

时间:2018-12-20 07:56:06

标签: python-3.x multithreading udp

我想通过线程从客户端接收数据包并将其保存到列表中。客户端通过FIFO发送数据包。我的服务器具有以下代码。

我有一个类,它定义了要接收数据的节点,并且在该类中,我有一个函数“ ListenToMyAddr”,它侦听端口以接收数据包,然后将数据包附加到该类中的列表“ self.buffer”

class ListenerAgent:

    def __init__(self, type, name, id, ip, port, pport, PACKET_SIZE=2048): 
        self.type = type
        self.name = name
        self.id = id
        self.ip = ip
        self.port = port
        self.PACKET_SIZE = PACKET_SIZE
        self.data = ''
        self.propdata = []
        self.pport = pport
        self.lstnodeinview = []
        self.packet = []
        self.plist = []
        self.buffer = []

    def ListenToMyAddr(self):
      try:
        mysock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        mysock.bind((node1.getIP(), node1.getPort()))
        print("Ready to receive my packets from SAT")
        while True:
            pkt, addr = mysock.recvfrom(self.PACKET_SIZE)
            self.buffer.append(pkt)

然后在程序的主体中创建一个线程,其目标是一个函数,该函数通过一个对象在类内部调用“ ListenToMyAddr”。但是问题是没有数据包保存到列表中。请指导我调试和修复代码。这是我程序的主要部分。

if __name__ == "__main__":
pport = 4001
node1 = ListenerAgent('ES', 'ES1', 2001, '127.10.2.1', 6001, pport)
node2 = ListenerAgent('SAT', 'SAT1', 1001, '127.10.1.1', 5001, pport)
node3 = ListenerAgent('ES', 'ES2', 2002, '127.10.2.2', 6002, pport)
storebuffer = []
lk = threading.Lock()
def saveToBuffer():
    with lk:
        storebuffer = node1.ListenToMyAddr()
    return storebuffer
t = threading.Thread(target=saveToBuffer)
t.daemon = True
t.start()
t.join()
for p in storebuffer:
    print(storebuffer[p])

0 个答案:

没有答案