网络编程 --ftp上传

这是一个模拟的ftp上传功能,客户端输入命令之后,在客户端执行一个命令,把输入都上传到服务端在返回,前面是一个类似练习的例子

客户端

#小试牛刀
# import socket
# kt=socket.socket() #创建socket对象
# info=("127.0.0.1",8800)
# kt.connect(info)
# while True:
#     import subprocess
#     res = subprocess.Popen("ipconfig",                #实例化Popen类  #并且接受的值是byte类型
#                            shell=True,
#                            stderr=subprocess.PIPE,
#                            stdout=subprocess.PIPE)
#     # print(len(res.stdout.read().decode("gbk")))  # 实例res通过stdout.read()方法读取数据
#     # print(">>>hello")                            # 这个地方不能写print
#     kt.send(res.stdout.read())

###########################################################################
# use=input("用户名:")
# pwd=input("密码:")
# val=("%s|%s"%(use,pwd)).encode("utf8")             #把多个变量同时传过去

############################################################################
import socket
kt=socket.socket() #创建socket对象
info=("127.0.0.1",8800)
kt.connect(info)
while True:
    import subprocess
    cmd=input(">>>请输入命令")
    res = subprocess.Popen(cmd,                #实例化Popen类  #并且接受的值是byte类型
                           shell=True,
                           stderr=subprocess.PIPE,
                           stdout=subprocess.PIPE)
    # print(len(res.stdout.read().decode("gbk")))  # 实例res通过stdout.read()方法读取数据
    # print(">>>hello")                            # 这个地方不能写print
    # out=res.stdout.read().decode("gbk")                          #写两个变量不让冲突,都在res上操作后面会出问题
    # print(len(out))
    # kt.send(res.stdout.read())

    out = res.stdout.read()
    err = res.stderr.read()
    print("out长度",len(out))
    print("err长度", len(err))

    #构建包头
    import struct
    # header_pack = struct.pack("i", len(out))   #把数据的长度打包成包头,和数据一起粘包发送过去,在服务端在解包
    #要发送的包头内容
    header_pack = struct.pack("i",len(out))      #i模式只能打包压缩整型类,打包的结果就是4个字节,可以直接发送
    #发送包头,
    kt.send(header_pack)
    #发送内容
    kt.send(out)                                 #包头和内容会作为粘包一起传过去,在对方一起解开
                                                #时间间隔特别短,两次发的就会当成一个包发过去

客户端

服务端

#小试牛刀
# import socket
# sock=socket.socket() #创建socket对象,后面的操作都是对这个对象进行操作
#
# info=("127.0.0.1",8800)
# sock.bind(info)
# sock.listen(5)
# while   True:
#     conn,addr=sock.accept() #开始阻塞
#     # print("接收成功!")
#     data=conn.recv(1024)             #recv的参数是固定长度
#     print(data.decode("gbk"))
#     print("接收成功!")
###########################################################################################
#conn是谁?
import socket
import struct
sock=socket.socket() #创建socket对象,后面的操作都是对这个对象进行操作

info=("127.0.0.1",8800)
sock.bind(info)
sock.listen(5)
while   True:
    conn,addr=sock.accept() #开始阻塞
    # print("接收成功!")
    data=conn.recv(4)             #recv的参数是固定长度
    data_length=struct.unpack("i",data)[0]     #对方传过来是4长度的字节,解包以后是数字表示的长度,默认在元组中,用索引取出
    print(data)
    print(data_length)
    print("接收成功!")

    recv_data_length=0
    recv_data=b""
    while recv_data_length<data_length:     #data_length的长度是对方传过来的,这个是最大的
        data=conn.recv(1024)
        recv_data_length+=len(data)
        recv_data+=data
    print(">>>>>>>%s"%type(recv_data))
    print(recv_data.decode("gbk"))
    # data_length=int(conn.recv(1024).decode("utf8"))

服务端

其中用到的一些知识点:

struct模块

subprocess模块

原文地址:https://www.cnblogs.com/zhuhaofeng/p/9588474.html

时间: 2024-12-24 21:58:44

网络编程 --ftp上传的相关文章

多线程 网络编程 文件上传案例多线程

Day13 多线程 3).多线程的好处: 提高程序的运行效率,提高用户的体验度. 创建新的线程: *    定义类继承Thread *    重写方法run *    创建Thread子类的对象 *    调用子类对象的方法 start() * *  为什么继承Thread *    Thread类是线程对象类 *    继承了Thread,子类也是线程对象 * *  为什么重写run *    Sun工程师,不清楚其他人员用线程做什么 *    全部写在run中 * *  为什么调用start

iOS核心笔记——网络编程-文件上传

1.文件上传: ?重要:当用户想向服务器传送客户端本地文件时,此时,需要使用POST请求方式.NSURLSessionUploadTask文件上传任务将文件传递至服务器. 1-1.技术点: ?重要:①设置请求头信息,告诉服务器本次网络请求是在向服务器传送文件:②拼接要上传的文件的数据,拼接过程中一定要严格按照文件上传格式进行,否则,文件上传将会失败. 1-2.文件上传格式: 1.设置请求头信息: ?重要:设置请求头,告诉服务器这是一次文件上传操作. 2.设置文件参数: ?重要:设置请求体,将文件

python网络编程socket模块实现ftp上传下载

本实验实现ftp上传文件下载文件功能,并具有校验文件完整性,打印进度条功能, 主要练习socket,struct模块. ftp用户文件存放在user.json文件中 user.json文件内容 {"lisi": "abcdef", "hyh": "123456"} ftp客户端脚本ftpclient.py #!/usr/bin/python # --*-- coding: utf-8 --*-- import socket i

Java实现FTP上传下载功能

Java FTP客户端工具包很多,在此我选用的Apache的FTPClient.这个包的获取可以通过http://commons.apache.org/net/来获取,我使用的是最新的commons-net-1.4.1.zip.其中包含了众多的java网络编程的工具包,官方文档列举如下: 1.支持网络协议如下: FTP.NNTP. SMTP.POP3.Telnet.TFTP.Finger.Whois.rexec/rcmd/rlogin.Time (rdate) and Daytime.Echo.

web、ftp上传区别

文件上传? 上传就是将信息从个人计算机(或者本地计算机)传送至中央计算机(远程的计算机)系统上,让网络上的人都能看到.将制作好的网页.文字.图片.视频等通过Web或者Ftp传送至互联网上的服务器系统,这一过程称为上传. web上传? web上传就是通过网页的方式,点击"浏览".进行"选定"."上传"进行提交等按钮来上传文件,也就是网页的功能上传. web上传的一般应用如下所示. 例如 1.在web登录方式在线撰写E-mail时添加附件 2.在论坛

使用Apache Commons Net API实现FTP上传下载过程中的坑点

最近项目需要实现FTP上传.下载功能,采用了Apache Commons Net API.代码很快就完成了,但由于对相关API使用场景不是很熟悉,走了一些弯路,抽一点时间做一下总结. A)主动被动模式选择:FTP主动模式和被动模式的详细介绍可以参考(http://blog.csdn.net/huanggang028/article/details/41248663).大概意思就是主动模式是客户端向服务端发送PORT命令,然后服务端通过20数据端口连接客户端开启的端口,然后发送数据:被动模式是客户

FTP上传文件速度太慢怎么办?

用户在建设网站时必不可少的一类工具就是文件传输工具.通过客户端和主机之间的文件交互,及时上传补丁文件.下载日志文件等,确保网站的正常稳定运行.但是也有不少用户反映使用FTP上传文件速度太慢,这是什么原因呢?FTP上传文件速度太慢怎么办?一.为什么FTP上传文件速度太慢? 运维人员在日常的工作中会使用FTP软件上传补丁.升级包.下载数据.日志等数据.FTP上传与下载速度慢,严重的影响运维人员的工作效率,与此同时一味的指责网络提供商,其实有些以偏概全. 为什么FTP上传文件速度太慢呢? FTP协议自

mysql自动备份数据库,同时ftp上传到指定服务器(scp远程获取本地备份)

最近要把服务器托管到电信机房,所以要对数据库进行备份,同时要把备份ftp上传到公司指定服务器. 一.先安装ftp服务 1.查询是否安装vsftpd: rpm -qa |grep vsftpd (rpm的安装:apt-get install rpm) 或者查询当前ftp进程:ps -ef|grep vsftpd ? 或者 ps -ef|grep ftp 2.如果没有就安装yum install vsftpd 3.安装完后看ftp安装目录:ps -ef|grep ftp 发现我的配置文件默认:/et

python之实现ftp上传下载代码(含错误处理)

# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之实现ftp上传下载代码(含错误处理) #http://www.cnblogs.com/kaituorensheng/p/4480512.html#_label2 import ftplib import socket import os def ftpconnect(ftp_info): try: ftp = ftplib.FTP(ftp_info[0]) except (socket.er