Я пытаюсь смоделировать Token Ring, используя Python с сокетами, но столкнулся с проблемой
основная программа
node1 = node.node(8081,8082,token)
node2 = node.node(8082,8083,emptyFrame)
node3 = node.node(8083,8084,emptyFrame)
node4 = node.node(8084,8081,emptyFrame)
node1.firstrun()
node1.start()
node2.start()
node3.start()
node4.start()
узел
class node(threading.Thread):
def __init__(self,s,d,frame):
threading.Thread.__init__(self)
self.dest = d
self.current = frame
self.newframe = frame
self.source = s
def firstrun(self):
time.sleep(1)
host = "localhost"
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("", self.source))
sendmessage = str(self.newframe.fullFrame())
s.sendto(sendmessage, (host,self.dest))
print "sent"
def run(self):
host = "localhost"
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("", self.source))
while True:
print "running"
message, addr = s.recvfrom(4096)
self.newframe = message
print "received"
В коде я создаю 4 узла, предоставляющих им разные порты и один из них - сообщение. Я заставляю этот первый порт отправлять сообщение следующему узлу, и все они запускают основную функцию. В основной функции я жду сообщения и делаю цикл while. Ход печатается для всех 4 узлов, а полученный - нет. Таким образом, я не понимаю, почему узел никогда не получает первый токен. Моя программа просто ждет бесконечно.
(Я удалил лишний код для ясности, ни один из них не должен был препятствовать процессу основного сокета)