|
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Python: 2.7
# Platform: Linux
# Author: wucl(wucl-20@163.com)
# Program: Socket_Server监听网络端口,接收Client发来的文件
# Version: 2.0
# History: 2016.1.28
# 2016.2.1 接收Client发来的文件并做MD5校验
import socket, time, hashlib, os, base64, re
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) |
|
|