我想通过线程从客户端接收数据包并将其保存到列表中。客户端通过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])