diff --git a/client.py b/client.py new file mode 100644 --- /dev/null +++ b/client.py @@ -0,0 +1,67 @@ +from hashtree import HashTree +import collections +from networkers import NetworkReader,NetworkWriter +import socket +import sys + + +localTree=HashTree.fromFile(open("clientFile.txt",mode="rb")) + +HOST = '127.0.0.1' # The remote host +PORT = 50009 # The same port as used by the server +s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +s.connect((HOST, PORT)) +fr=s.makefile(mode='rb') +fw=s.makefile(mode='wb') + +networkReader=NetworkReader(fr) +networkReader.start() +networkWriter=NetworkWriter(fw) +networkWriter.start() + +blocksToTransfer=[] +nodeStack=collections.deque([0]) # root +incoming=networkReader.output # synchronized message queue +outcoming=networkWriter.input + + +# determine which blocks to send +while len(nodeStack)>0: + i=nodeStack.pop() + jsonData={"command":"req", "index":i} + outcoming.put((jsonData,b"")) + + jsonData,binData=incoming.get(timeout=2) + assert jsonData["index"]==i + assert jsonData["dataType"]=="hash" + + if localTree.store[i]!=binData: + if 2*i+3