使用socket实现的ftp文件传输服务器
服务端:
# encoding:utf-8
# Author:"richie"
# Date:8/23/2017 from socket import *
import pickle
import os server=('127.0.0.1',17001)
root_path= os.path.abspath(os.curdir) # The absolute path of the current folder
sock = socket(AF_INET, SOCK_STREAM)
sock.bind(server)
sock.listen(5)
print('Wait for the client connection!!!')
while True: # Link cycle
conn, addr = sock.accept() #Waiting for client connection
print('Connect by',addr)
while True: # Communication cycle
try:
data = conn.recv(1024) # Receive client data
if not data: break
filename = data.decode('utf-8') # Bytes -> String
file_path = os.path.join(root_path,filename) # join path
# get file size if file not existed file size is zero
file_size = os.path.getsize(file_path) if os.path.exists(file_path) else 0
header = pickle.pack('q', file_size) # pack header
conn.send(header) # send header
if file_size: #The file exists and size than 0
with open(file_path,'rb') as f:
for line in f:
conn.send(line) # send line of file data
else:
conn.send(b'')
except ConnectionResetError as e: # conn abnormal
break
except Exception as e:
print(e)
conn.close()
客户端
# encoding:utf-8
# Author:"richie"
# Date:8/23/2017 from socket import *
import pickle,sys
import os
def progress(percent,width=250):
if percent >= 100:
percent=100
show_str=('[%%-%ds]' %width) %(int(width * percent / 100) * "#") #字符串拼接的嵌套使用
print("\r%s %d%%" %(show_str, percent),end='',file=sys.stdout,flush=True) server=('127.0.0.1',17001)
sock = socket(AF_INET,SOCK_STREAM)
sock.connect(server)
root_path= os.path.abspath(os.curdir) # The absolute path of the current folder while True:
print('The current home path is '+root_path)
filename = input('Please enter the path>>:').strip()
if not filename:continue
sock.send(filename.encode('utf-8'))
header = sock.recv(8) # Receive the header
total_size = pickle.unpack('q',header)[0] # get header data
each_recv_size = 1024*8421
recv_size = 0
recv_data = b''
down_filename = 'down_'+filename
f = open(down_filename,'wb')
while recv_size < total_size:
if total_size - recv_size < each_recv_size:
data = sock.recv(total_size - recv_size)
else:
data = sock.recv(each_recv_size)
recv_size += len(data)
recv_percent = int(100 * (recv_size / total_size)) # Receive the percent
progress(recv_percent, width=30) # The width of the progress bar is 30
f.write(data)
print()
f.close()
使用socket实现的ftp文件传输服务器的更多相关文章
- FTP文件传输服务器原理
FTP服务器,全称File Transfer Protocol Server,是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务.FTP,文件传输协议(File Transfer ...
- vsftpd-基于ftp协议的文件传输服务器软件
第一部分:在Linux上部署vsftpd服务 1. vsftpd简介 1.1 vsftpd是什么? ftp(File Transfer Protocol)文件传输协议.(实现不同操作系统之间文件的传输 ...
- Python实现终端FTP文件传输
实现终端FTP文件传输 代码结构: .├── client.py├── readme.txt└── server.py 运行截图: readme.txt tftp文件服务器 项目功能: * 客户端有简 ...
- 【RL-TCPnet网络教程】第35章 FTP文件传输协议基础知识
第35章 FTP文件传输协议基础知识 本章节为大家讲解FTP(File Transfer Protocol,文件传输协议)的基础知识,方便后面章节的实战操作. (本章的知识点主要整理自网络) ...
- FTP文件传输服务
FTP文件传输服务 一 .FTP 连接及传输的模式 l 控制连接:TCP21,用于发送FTP命令信息. l 数据连接:TCP 20, 用于上传下载数据. · 数据连接建立的类型: ·主动模式: 服 ...
- SSIS 学习之旅 FTP文件传输-脚本任务
这一章主要讲解一下用脚本怎么把CSV文件抛送到FTP服务器上 设计: 通过Demon库的Users表数据生成CSV文件. 生成后的CSV文件抛送到FTP指定目录下. 控件的使用这里就不做详细讲 ...
- FTP 文件传输服务
昨晚心血来潮,尝试用python写了一个ftp文件传输服务,可以接收指令,从远程ftp服务器同步指定目录数据,最后没用上,开源出来. https://github.com/jadepeng/ftp_t ...
- FTP(文件传输协议)工作原理
目前在网络上,如果你想把文件和其他人共享.最方便的办法莫过于将文件放FTP服务器上,然后其他人通过FTP客户端程序来下载所需要的文件. 1.FTP架构 如同其他的很多通讯协议,FTP通讯协议也采用客户 ...
- Windows下通过socket进行字符串和文件传输
今天在windows平台下,通过socket实现了简单的文件传输.通过实现这一功能,了解基本的windows网络编程和相关函数的使用方法. 在windows平台上进行网络编程,首先都需要调用函数WSA ...
随机推荐
- 在无人值守程序(服务)中调用Microsoft Graph
作者:陈希章 发表于 2017年5月31日 什么是无人值守程序(服务) 我在此前用了几篇文章分别介绍了在桌面应用程序(控制台),Web应用程序(ASP.NET MVC),以及PowerSehll脚本中 ...
- linux 安装tensorflow(gpu版本)
一.安装cuda 具体安装过程见我的另一篇博客,ubuntu16.04下安装配置深度学习环境 二.安装tensorflow 1.具体安装过程官网其实写的比较详细,总结一下的话可以分为两种:安装rele ...
- 配置nginx以获取真实的客户端ip地址
当我们使用了nginx来转发客户端的请求以后,tomcat是无法正确获取到客户端的ip地址的,而是获取到配置了nginx的那台服务器的ip地址.因为tomcat所接收到的请求是通过nginx发出来的( ...
- CentOS openssh升级至7.4版本
1.原环境: cat /etc/issue CentOS release 6.5 (Final) ssh -V OpenSSH_7.3p1, OpenSSL 1.0.1e-fips 11 Feb 20 ...
- dubbo+zookeeper+jsp+springmvc+spring+mybatis+mysql+maven完整示例
项目分为三部分,这里分为三个maven项目(基于web,所以最后一个为maven创建的web项目) 1.接口定义以及实体类定义(api+pojo) --- maven创建java项目,打包成jar 2 ...
- Spring框架中ModelAndView、Model、ModelMap区别
原文地址:http://www.cnblogs.com/google4y/p/3421017.html SPRING框架中ModelAndView.Model.ModelMap区别 注意:如果方法 ...
- iOS 设置视图背景的透明度
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #00afca } span.s1 { color: #fffff ...
- C#基础在using中创建对象
在using中创建的对象的类必须是实现了IDispose接口的类,示例代码如下: static void Main(string[] args) { Method(); Console.WriteLi ...
- C++ 头文件系列(iomanip)
1. 简介 该头文件定义了一些参数化的操纵器(manipulatators),注意ios头文件也定义了一些. 2. maniapulators 2.1 C++98 resetiosflags : 重置 ...
- split 命令详解
作用:将大文件切割成小文件. 参数:-l 按照行数分隔文件 -b 按照大小分隔文件 -d 使用数字做后缀 实例:分隔文件默认1000行 split mylog ; wc ...