C/S架构的简单文件传输系统的实现
来源:互联网 发布:淘宝上卖的茶杯犬真吗 编辑:程序博客网 时间:2024/05/17 12:19
C/S架构的简单文件传输系统的实现
源码链接:
https://github.com/GYgavin/python/blob/master/client.py
https://github.com/GYgavin/python/blob/master/server.py
设计思路:
- 确定协议
- 语言选择
- 设计函数
- 构建连接
- 发送文件
选择使用python的原因:
所需实现的功能比较简单,灵活性不需要太高,这样的程序用c语言编写起来太过于繁琐,用python代码量少,容易理解和修改。
实现思路:
1. Server端实现思路
**备注:此处判断的结果yes和no分别代表判断得到客户端的get和put指令
2. Client端实现思路
备注:此处判断yes为put,no为get
实现代码:
服务端代码
#!/usr/bin/env pythonfrom socket import *import timeHOST = '127.0.0.1'PORT = 9036BUFSIZ = 1024000ADDR = (HOST,PORT)def recv_file(filename): print 'Starting receive file...' filename = open(filename,'wb') tcpCliSock.send('File will be received!') while True: data = tcpCliSock.recv(4096000) if data == 'EOF': print 'File received successfully!' break filename.write(data) filename.close()def send_file(filename): print 'Starting send file...' tcpCliSock.send('File will be sent...') filename = open(filename,'rb') while True: data = filename.read(4096000) if not data: break tcpCliSock.send(data) filename.close() time.sleep(1) tcpCliSock.send('EOF') print 'send file success!'tcpSerSock = socket(AF_INET,SOCK_STREAM)tcpSerSock.bind(ADDR)tcpSerSock.listen(5)while True: print('waiting for connection...') tcpCliSock,addr = tcpSerSock.accept() print('Tcpserver have connected with :',addr) while True: command = tcpCliSock.recv(4096000) act,filename = command.split() if act == 'put': print 'receiving file from client,please waiting...' recv_file(filename) elif act == 'get': print 'sending file to client,please waiting...' send_file(filename) else: print 'Error:no command,please input put or get + filename' continue
客户端代码
#!/usr/bin/env pythonimport socketimport timeHOST = '127.0.0.1'PORT = 9036BUFSIZ = 1024000ADDR = (HOST,PORT)tcpCliSock =socket.socket(socket.AF_INET,socket.SOCK_STREAM)def recv_file(filename): print 'transfer from:',ADDR filename = open(filename,'wb') while True: data = tcpCliSock.recv(4096) if data == 'EOF': print 'File received successfully!' break filename.write(data) filename.closedef send_file(filename): print 'transfer from:',ADDR filename = open(filename,'rb') while True: data = tcpCliSock.recv(4096000) if data == 'EOF': print 'File received successfully!' break filename.write(data) filename.closedef send_file(filename): filename = open(filename,'rb') while True: data = filename.read(4096000) if not data: break tcpCliSock.send(data) filename.close() time.sleep(1) tcpCliSock.send('EOF') print 'send file success!'try: tcpCliSock.connect(ADDR) while True: client_command = raw_input('File transfer >>') if not client_command: continue tcpCliSock.send(client_command) act,filename = client_command.split() if act == 'put': print 'File sending...' send_file(filename) elif act == 'get': print 'File receiving...' recv_file(filename) else: print 'command error!'except socket.error,e: print 'ERROR',efinally: tcpCliSock.close()
运行结果:
小编能力有限,水平不高,感谢大家支持,关注!
0 0
- C/S架构的简单文件传输系统的实现
- C/S架构的简单文件传输系统的实现
- C/S架构的简单文件传输系统的实现
- C/S架构的简单文件传输系统的实现
- C/S架构的简单文件传输系统的实现
- C\S架构下实现简单的文件传输功能
- Java swing实现简单的C/S聊天及文件传输系统
- 一个简单的文件传输验证码识别c/s实现
- 基于C/S架构的聊天系统的实现
- Linux-C下C/S架构实例,实现文件传输功能
- C/S架构和B/S架构的简单理解
- 一个简单的C/S 架构程序
- 简单文件传输程序的实现
- 基于C/S架构的排队系统
- 文件传输协议的简单设计与实现(c语言)
- 基于winsock的c/s模式的简单的文件传输项目报告书
- 什么是基于B/S、c/s架构的系统设计
- socket实现简单文件传输系统
- springmvc对ajax的支持
- 第9天:自定义异常
- Android开发fastjson错误:JSONException: default constructor not found. class com.xx...
- 我的GitHub搭建博客
- php根据URL获得网页内容
- C/S架构的简单文件传输系统的实现
- 获取了一个数组对象,可以判断它所在的下标
- Spark应用(一)提取RDD内部信息和信息放入RDD
- 重建二叉树,二叉树的镜像,二叉搜索树的后序遍历
- 最简单的Dagger2入门教程
- <26>python学习笔记——根据字典中的值的大小进行排序
- 视频开发学习路线
- 【C#】WPF的xaml中定义的Trigger为什么有时候会不管用,如Border的MouseOver之类的
- linux arm架构下tslib1.4 移植全过程2