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”信号后,就知道文件传完了。 您可能感兴趣的文章:
(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
