我想实现令牌传递的环算法。该算法稍后将使用群集中的不同节点进行测试。我是python和网络编程的新手。我想要简单地开始,并在环中有两个节点。当令牌值等于节点号时,节点会将令牌发送给另一令牌,否则节点等待令牌。 因此,在我的代码中,节点1启动,节点2等待令牌,它应该循环。我的代码只能运行2轮!我知道连接有问题(打开和关闭它)。我每次都关闭连接,但如果您知道如何操作,它可以保持打开状态。 那么我怎样才能改变它,让它像我想要的那样循环,而不仅仅是两回合!我运行节点1代码,然后运行节点2 ,但最终应该只有一个代码在任何节点上运行!任何帮助和建议,将不胜感激。令牌在Python中传递环算法
#node 1
import socket
import time
s = socket.socket()
ss = socket.socket()
host = socket.gethostname()
other_port = 12345
my_port= 5454
token = 1
time.sleep(5) #to wait to other node to run the program
while True:
print "node 1 is here"
if token != 1:
while True:
s.bind((host, my_port))
s.listen(5)
c, addr = s.accept()
print 'Node 1 Got connection from', addr
data = c.recv(1024)
if int(data) == 1:
print "ifffffffffff node 1"
token = 1
c.close()
break
else:
ss.connect((host, other_port))
token = token+1
ss.sendall('2')
print "Node 1 sent the",token
ss.close()
和:
#node 2
import socket
import time
s = socket.socket()
ss = socket.socket()
host = socket.gethostname()
my_port = 12345
other_port = 5454
token = 1
while True:
if token != 2:
while True:
s.bind((host, my_port))
s.listen(5)
c, addr = s.accept()
print 'node 2 Got connection from', addr
data = c.recv(1024)
if int(data) == 2:
token = 2
c.close()
break
else:
ss.connect((host, other_port))
token = token-1
ss.sendall('1')
print "Node 2 sent the",token
ss.close()
谢谢,但你如何同步他们在同一时间开始?我把连接在循环,所以我不会得到连接拒绝错误。 – mohi
我刚开始使用它,然后打印并开始工作。 – User