我想實現令牌傳遞的環算法。該算法稍後將使用羣集中的不同節點進行測試。我是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