def CalcMD5(fineName, block_size=64 * 1024):
with open(fineName, 'rb') as f:
md5 = hashlib.md5()
while True:
data = f.read(block_size)
if not data:
break
md5.update(data)
retmd5 = md5.hexdigest()
print(retmd5)
return retmd5
def main(IP, Port, log, error_log):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((IP, Port))
s.listen(12)
print 'Listened on ', socket.gethostname(), Port
reg = re.compile('filename:(.*?):(.*)::::')
while True:
conn, addr = s.accept()
print(time.ctime(), 'Connected from ', addr)
recvd = conn.recv(1024)
if recvd:
ss = reg.findall(recvd)
filename = ss[0][0]
md5 = ss[0][1]
f = open(filename, 'wb')
while True:
data = conn.recv(1024)
if not data:
break
if data == 'EOF':
f.close()
log.write('%s Received %s\n'%(time.ctime(), filename))
log.flush()
if CalcMD5(filename) == md5:
print('%s Received Successfully!\n' %filename)
else:
error_log.write('%s %s Recevied failed\n'%(time.ctime(), filename))
error_log.flush()
print(CalcMD5(filename))
else:
f.write(data)
f.flush()
conn.close()
s.close()
if __name__ == "__main__":
IP = ''
Port = 12345
log = open('log.txt','w+')
error_log = open('error_log.txt','w+')
main(IP, Port, log, error_log)
import socket, hashlib
import time, os, base64, os.path
def CalcMD5(fineName, block_size=64 * 1024):
with open(fineName, 'rb') as f:
md5 = hashlib.md5()
while True:
data = f.read(block_size)
if not data:
break
md5.update(data)
retmd5 = md5.hexdigest()
print(retmd5)
return retmd5
def SendFile(s, filename):
print('Sending %s' % filename)
s.sendall('filename:%s:%s::::'%(filename, CalcMD5(filename)))
f = open(filename, 'rb')
while True:
chunk = f.read(chunksize)
if not chunk:
f.close()
print('%s Successfully Sent %s\n' %(time.ctime(), filename))
break
s.sendall(chunk)
time.sleep(1)
s.sendall('EOF')
s.close()
def main(dirname, IP, Port, MB = 1024):
for filename in os.listdir(dirname):
if os.path.isfile(filename):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((IP, Port))
SendFile(s, filename)
if __name__ == '__main__':
dirname = '/root/test/'
IP = '10.88.106.200'
Port = 12345
MB = 1024
chunksize = int(MB*1024*1024)
main(dirname, IP, Port, MB)