socker_server.py:
- 组件调用:SocketServer,yaml,json
- 实现功能:获取yaml中的文件信息,用soket进行文件传输(TCP+三次握手)
socker_client.py:
properties:
- 为yaml文件,储存文件信息
#file:socker_server.py
#_*_coding:utf-8_*_ #by Linhut #time:2017/4/8 import SocketServer,yaml,json class socketHandler(SocketServer.BaseRequestHandler): def setup(self): print '\033[32mServer starting successful ....\033[0m' with open('F:/cgi-bin/p2/config/properties', 'r') as f: content = f.read() #读出来内容 self.cfg = yaml.load(content) #通过yaml变成字典 def handle(self): conn = self.request #把客户端的soket对象收到 first_mgs = conn.recv(1024) #判断第一次握手成功,发生文件头部 if first_mgs == 'successful': with open(self.cfg['file_matadata']['filepath'],'rb') as f: #rb打开文件 self.content = f.read() filesize = len(self.content) self.cfg['file_matadata']['filesize'] = filesize # raml文件赋值文件大小 ack_msg = json.dumps(self.cfg).encode() conn.send(ack_msg) #给客户端发送信息 else: print 'client failed...' if conn.recv(1024) == 'start': conn.send(self.content) finish_msg = conn.recv(1024) print finish_msg def finish(self): pass class socketserever(SocketServer.TCPServer): pass class MyServer(SocketServer.TCPServer,SocketServer.ThreadingMixIn): pass if __name__=='__main__': server = socketserever(('127.0.0.1',2010),socketHandler) server.serve_forever()
#file:socker_client.py
#_*_coding:utf-8_*_ #by Linhut #time:2017/4/8 import socket,json,sys,time recv_file = b'' recv_size = 0 server_address = ('127.0.0.1',2010) sock =socket.socket(socket.AF_INET,socket.SOCK_STREAM) for i in range(5): try: sock.connect(server_address) break except Exception as e: print 'client connection server \033[31mfailad\033[0m,please 3s retry..' time.sleep(3) else: print 'client exit..' sys.exit(10) sock.send('successful') ack_msg = json.loads(sock.recv(1024).decode()) #拿ack信息 print ack_msg if ack_msg['file_matadata']: filename = ack_msg['file_matadata']['filename'] filesize = ack_msg['file_matadata']['filesize'] name = raw_input('raw_input you locla filename:') save_file_path = 'C:/Users/T530_I7QM/Desktop/%s.pdf'%name sock.send('start') #告诉服务器端可以发送数据了 while recv_size < filesize: content = sock.recv(2048) recv_file += content recv_size += 2048 print '[%s] recv_size:%s'%(filename,recv_size) else: with open(save_file_path,'ab+') as f: f.write(recv_file) sock.send('\033[32m client recv finished\033[0m') #完成并发生一个消息 print '\033[32m recv finished.. \033[0m'
#file:properties
ack_msg: filename: qqq.pdf filepath: C:/Users/T530_I7QM/Desktop/qqq.pdf filesize:
最新评论