Python实现的简单文件传输服务器和客户端
还是那个题目(题目和流程见java版本),感觉光用java写一点新意也没有,恰巧刚学习了python,何不拿来一用,呵呵: import SocketServer,time class MyServer(SocketServer.BaseRequestHandler): userInfo = { 'yangsq' : 'yangsq','hudeyong' : 'hudeyong','mudan' : 'mudan' } def handle(self): print 'Connected from',self.client_address while True: receivedData = self.request.recv(8192) if not receivedData: continue elif receivedData == 'Hi,server': self.request.sendall('hi,client') elif receivedData.startswith('name'): self.clientName = receivedData.split(':')[-1] if MyServer.userInfo.has_key(self.clientName): self.request.sendall('valid') else: self.request.sendall('invalid') elif receivedData.startswith('pwd'): self.clientPwd = receivedData.split(':')[-1] if self.clientPwd == MyServer.userInfo[self.clientName]: self.request.sendall('valid') time.sleep(5) sfile = open('PyNet.pdf','rb') while True: data = sfile.read(1024) if not data: break while len(data) > 0: intSent = self.request.send(data) data = data[intSent:] time.sleep(3) self.request.sendall('EOF') else: self.request.sendall('invalid') elif receivedData == 'bye': break self.request.close() print 'Disconnected from',self.client_address print if __name__ == '__main__': print 'Server is startednwaiting for connection...n' srv = SocketServer.ThreadingTCPServer(('localhost',50000),MyServer) srv.serve_forever()
import socket,time class MyClient: def __init__(self): print 'Prepare for connecting...' def connect(self): sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.connect(('localhost',50000)) sock.sendall('Hi,server') self.response = sock.recv(8192) print 'Server:',self.response self.s = raw_input("Server: Do you want get the 'thinking in python' file?(y/n):") if self.s == 'y': while True: self.name = raw_input('Server: input our name:') sock.sendall('name:' + self.name.strip()) self.response = sock.recv(8192) if self.response == 'valid': break else: print 'Server: Invalid username' while True: self.pwd = raw_input('Server: input our password:') sock.sendall('pwd:' + self.pwd.strip()) self.response = sock.recv(8192) if self.response == 'valid': print 'please wait...' f = open('b.pdf','wb') while True: data = sock.recv(1024) if data == 'EOF': break f.write(data) f.flush() f.close() print 'download finished' break else: print 'Server: Invalid password' sock.sendall('bye') sock.close() print 'Disconnected' if __name__ == '__main__': client = MyClient() client.connect() line-34到line-41处理文件下载,client收到server的“EOF”信号后,就知道文件传完了。 您可能感兴趣的文章:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |