首页 > 编程语言 >python socket模块实现上传文件到服务器

python socket模块实现上传文件到服务器

时间:2024-07-06 22:29:08浏览次数:17  
标签:socket python recv client file 上传 size

socket模块文件上传案例

cat server.py
# -*- coding:UTF-8 -*-
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('0.0.0.0', 8001))  # 127.0.0.1 或 查看自己局域网本地IP地址
sock.listen(1)

conn, addr = sock.accept()

# 接收文件大小
data = conn.recv(1024)
total_file_size = int(data.decode('utf-8'))

# 接收文件内容
file_object = open('krb5-libs-1.15.1-50.el7.x86_64.rpm', mode='wb')
recv_size = 0
while True:
    # 每次最多接收1024字节
    data = conn.recv(1024)
    file_object.write(data)
    file_object.flush()

    recv_size += len(data)
    # 上传完成
    if recv_size == total_file_size:
        break

# 接收完毕,关闭连接
conn.close()
sock.close()
cat client.py
# -*- coding:UTF-8 -*-
import time
import os
import socket

client = socket.socket()
client.connect(('10.10.10.201', 8001))

file_path = 'krb5-libs-1.15.1-50.el7.x86_64.rpm'

# 先发送文件大小
file_size = os.stat(file_path).st_size
client.sendall(str(file_size).encode('utf-8'))

print("准备...")
time.sleep(2)
print("开始上传..")
file_object = open(file_path, mode='rb')
read_size = 0
while True:
    chunk = file_object.read(1024) # 每次读取1024字节
    client.sendall(chunk)
    read_size += len(chunk)
    if read_size == file_size:
        break

client.close()
将server.py上传到服务器上并运行
python3 server.py

本地运行client.py,修改要上传的文件路径和服务器的IP即可上传成功

使用场景:

服务器误操作将krb5-libs的rpm包强制删除,导致服务器无法ssh连接,并且不能上传rpm包进行修复
在强制删除依赖后,当前终端没有退出的时候,可以使用上述方法补救

标签:socket,python,recv,client,file,上传,size
From: https://blog.csdn.net/qq_54738879/article/details/140236041

相关文章

  • python速通(函数)
    (网页的生成)牛客网的某个网页基本已经写好了,最后一步为了适应手机的尺寸,需要将高度增加一倍。为了适用于多个网页,牛牛希望你能将这个功能定义为一个函数,函数输入网页高度h,输出增加后的结果。defiheight(h):returnh*2h1,h2=map(int,input().split())print(iheight......
  • python随笔day02
    1.arg元组类型和**kwargs字典类型#元组参数:元组类型数据,对传递参数有顺序要求deftest(*args):print(f"args[0]={args[0]},args[1]={args[1]},args[2]={args[2]}")test(1,2,3)#字典参数:字典类型数据,对传递参数没有顺序要求,格式要求key=value值deftest2(**kwargs):......
  • Linux开发:进程间通过Unix Domain Socket传递数据
    进程间传递数据的方式有很多种,Linux还提供一种特殊的Socket用于在多进程间传递数据,就是UnixDomainSocket(UDS)。虽然通过普通的Socket也能做到在多进程间传递数据,不过这样需要通过协议栈层的打包与拆包,未免有些浪费效率,通过UDS,数据仅仅通过一个特殊的sock文件就可以进行传递。......
  • Python学习
    目录7-1jmu-python-判断闰年7-2jmu-python-素数7-3jmu-python-找字符7-4计算表达式(*,//,%)7-5客户评级7-6运输打折问题7-7水仙花数7-8生成输入数的乘方表7-9输出字母在字符串中位置索引7-10通过两个列表构建字典7-11jmu-python-重复元素判定7-12求集合......
  • python练习01
    练习if语句age=int(input('请输入年龄'))ifage<10:print('还是个小屁孩')elif10<age<20:print('青春期叛逆的小孩')elif30<age<40:print('老大不小了,赶紧结婚,小屁孩')elif40<age<50:print('家里有个不听话的小屁孩')elif50<......
  • python数据容器(二)元组
    1.数据容器:tuple(元组)(1)定义t1=(1,"Hello",True)t2=()t3=tuple()print(f"t1的类型是:{type(t1)},内容是:{t1}")print(f"t2的类型是:{type(t2)},内容是:{t2}")print(f"t3的类型是:{type(t3)},内容是:{t3}")运行结果:(2)定义单个元素的元素t1=("hel......
  • opencv环境搭建-python
    最近遇到了一些图像处理的需求,所以需要学习一下opencv,来记录一下我的学习历程。安装numpypipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplenumpy安装matplotlibpipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplematplotlib安装opencvpipin......
  • python数据容器(一)列表list
    思维导图代码1.数据容器入门2.数据容器:list(列表)name_list=['itheima','itcast','python']print(name_list)print(type(name_list))运行结果: name_list=['itheima',666,True]print(name_list)print(type(name_list))运行结果: name_l......
  • Python基础语法
    #1.注释-代码中不参与编译执行的部分就是注释。(不会被翻译成机器码,它的存在不会影响程序的功能)#1)注释的作用#a.对代码进行注解和说明,提高代码的可读性(对人)#b.取消代码的功能##2)添加注释的方法#a.单行注释-在一行注释内容前加#(添加和取消单行注......
  • python和pycharm安装
    一、python和pycharm的作用Python是一种跨平台的计算机程序语言。Python是我们进行项目开发而使用的一门计算机语言,通俗来说就是编写代码,编写完代码之后,我们就需要运行,不然代码是死的,机器是无法识别的,这时我们需要运行Python代码的运行环境和工具。PyCharm带有一整套......