Python TCP简易版文件传输代码

python socket基于TCP的文件传输程序 阅读详情

简介

感觉没有特别顺手的临时文件传输程序。写个demo试试。
代码可以做客户端也可以做服务端。
做为服务器端时,客户端可以发送文件给服务端,也可以从服务端获取文件。

环境

  1. 系统:win10(兼容Linux)
  2. Python:Python 3.8.1(兼容Python 2.7)

使用说明

作为服务端

命令格式:python demo.py server {server_ip} {server_port}

  1. server:server模式
  2. server_ip:服务端地址
  3. server_port:服务端端口(自己随便设置)
    例:python demo.py server 127.0.0.1 8000

作为客户端

命令格式:python demo.py client {server_ip} {server_port} { sendfile source_fullpath taget_filename| recvfile taget_filename storage_fullpath | exit }

  1. client:client模式
  2. server_ip:服务端地址(与server对应)
  3. server_port:服务端端口(与server对应)
  4. sendfile source_fullpath taget_filename:从客户端向服务端发送文件,客户端文件全路径,将保存在服务端上的文件名
    例:python demo.py client 127.0.0.1 8000 sendfile D:/123.txt 456.txt(发送客户端D:/123.txt到服务端demo.py同目录下456.txt)
  5. recvfile taget_filename storage_fullpath:从服务端获取文件,服务端文件名,将保存在客户端上的文件全路径
    例:python demo.py client 127.0.0.1 8000 recvfile 456.txt D:/123.txt(接收服务端demo.py同目录下456.txt到客户端D:/123.txt)
  6. exit:退出服务端

demo代码

demo.py

# coding: utf-8
# 20200627 by
import socket
import sys
import os

def get_script_path():
    return os.path.split(os.path.realpath(__file__))[0]

# 正向接收文字
def s_00(conn): 
    data_len = int(conn.recv(10).decode('utf-8'))
    data = b''
    cache_size = 35
    if data_len % cache_size == 0:
        cache_size += 1
    for i in range(int(data_len / cache_size) + 1):
        data += conn.recv(cache_size)
    print(data.decode('utf-8') + '\n')
    return True

# 正向接收文件
def s_01(conn): 
    filename_len = int(conn.recv(10).decode('utf-8'))
    filename = conn.recv(filename_len).decode('utf-8')
    print('[+] Recv file: {filename}'.format(filename=filename))
    f = open('{path}/{filename}'.format(path=get_script_path(), filename=filename),'wb')
    while True:
        data = conn.recv(1024)
        if not data:
            break
        f.write(data)
    f.close()

# 反向发送文字
def s_10(conn):
    pass

# 反向发送文件
def s_11(conn):
    filename_len = int(conn.recv(10).decode('utf-8'))
    filename = conn.recv(filename_len).decode('utf-8')
    print('[+] Send file: {filename}'.format(filename=filename))
    f = open('{path}/{filename}'.format(path=get_script_path(), filename=filename), 'rb')
    while True:
        data = f.read(1024)
        if not data:
            break
        conn.send(data)
    f.close()

def server(host, port):

    server_handle = {
        '00': s_00,
        '01': s_01,
        '10': s_10,
        '11': s_11,
    }

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((str(host), int(port)))
    s.listen(1)

    while True:
        # 等待连接后分配会话,获取地址addr[0]
        conn, addr = s.accept()
        print('[+] Accept source address: {addr}'.format(addr=addr[0]))
        # 等待数据
        handle = conn.recv(2).decode('utf-8')
        # 格式:^(?P<模式>d)(?P<数据类型>d)(?P<数据长度>d{10})(?P<数据>d)
        #   1. 模式:       
        #               0. 正向模式
        #               1. 反向模式
        #   2. 数据类型:
        #               0. 文字
        #               1. 文件
        #   3. 数据长度:
        #               文字长度/文件名长度
        #   4. 数据:
        #               二进制数据
        if handle == '':
            conn.close()
            continue

        fun = server_handle.get(handle, None)
        if fun == None and handle != '':
            break
        fun(conn)
        conn.close()

    s.close()


# 发送文字
def c_00(s):
    data = sys.argv[5]
    data_len = str(len(data.encode('utf-8'))).zfill(10)
    string = '00' + data_len + data
    s.send(string.encode('utf-8'))

# 发送文件
# source_fullpath 456.txt
def c_01(s):
    mode = '01'.encode('utf-8')
    source_fullpath = sys.argv[5]
    filename = sys.argv[6].encode('utf-8')
    filename_len = str(len(filename)).zfill(10).encode('utf-8')
    s.send(mode + filename_len + filename)
    f = open(source_fullpath, 'rb')
    while True:
        data = f.read(1024)
        if not data:
            break
        s.send(data)
    f.close()

# 获取文字
def c_10(s):
    pass

# 获取文件
# taget_filename.txt D:/456.txt
def c_11(s):
    mode = '11'.encode('utf-8')
    taget_filename = sys.argv[5].encode('utf-8')
    taget_filename_len = str(len(taget_filename)).zfill(10).encode('utf-8')
    storage_fullpath = sys.argv[6]
    f = open(storage_fullpath, 'wb')
    s.send(mode + taget_filename_len + taget_filename)
    while True:
        data = s.recv(1024)
        if not data:
            break
        f.write(data)
    f.close()

def c_12(s):
    mode = '12'.encode('utf-8')
    s.send(mode)

def client(host, port):
    client_handle = {
        'sendinfo': c_00,
        'sendfile': c_01,
        'recvinfo': c_10,
        'recvfile': c_11,
        'exit': c_12
    }

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((str(host), int(port)))

    fun = client_handle.get(sys.argv[4], None)
    if fun == None:
        print('[-] Unknown command: {command}'.format(command=sys.argv[4]))
    else:
        fun(s)

    s.close()

if __name__ == "__main__":
    
    mode = {
        'server': server,
        'client': client
    }

    host = sys.argv[2]
    port = sys.argv[3]

    fun = mode.get(sys.argv[1], None)
    if fun != None:
        fun(host, port)
python实现简单的文件传输程序-TCP layout: post title: “python实现简单的文件传输程序-TCP” date: 2019-05-18 description: “一次计网作业,分UDP和TCP” tag: python 说明 本程序仅在python3.7.3下测试无错 TCP 因为代码比较短所以直接贴了,程序实现了如下功能: 服务端与单个客户端建立一条TCP连接,客户端从服务端的目录下下载指定文件... 阅读详情

相关推荐

Python实现TCP文件传输

前几天已经讲过了UDP协议下大文件传输的python实现代码,今天再实现TCP协议下大文件传输的python实现代码。 TCP和UDP的实现过程还是比较不一样的。 实现代码: 服务端: import socket import time s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind(('127.0.0.1',9999)...

sunrise的博客 9980

简单基于TCP的文件传输

生活中我们如何通过脚本进行传输文件呢,以下提供如何进行传输txt,jpg等格式的文件。注意:仅仅代表个人意见,可以根据个人想法修改。基于python的文件传输。

mr_xioabai的博客 558

TCP、UDP文件传输分析

题目要求 为巩固提高网络编程能力,加深对socket套接字的使用,并进一步的理解UDP和TCP之间的不同,该题目主要需完成以下两个目标: 实现跨物理主机的文件传输系统。 分别使用TCP和UDP协议,利用socket库,完成一个文件传输程序。 文本文件能够跨物理主机在局域网内进行传输。 语言不限(python,java,C,C++,C#)。 分析文件传输的时延。 分...

sunrise的博客 4529

Python网络编程——使用TCP方式传输文件

TCP文件下载器 客户端 需求:输入要下载的文件名,从服务器端将文件拷贝到本地 步骤: 1.创建TCP套接字,绑定端口 2.连接服务端 3.输入要下载的文件名 4.将文件名编码,并发送到服务端 5.接收服务端返回的数据 6.关闭套接字 代码 # 导入模块 import socket # 创建套接字 tcp_client_socket = socket.socket(so...

HMMHMH的博客 1万+

python+socket 实现网络信息交互及文件传输

前言: 以前面试总会被问到Socket编程懂不懂,因为工作一直没涉及加上自己只是上学的时候学过,所以一直都只知道皮毛,现在想专做算法面试又遇到这个问题,疫情在家闲着也是闲着,所以从网查找资料自己也实现以下,现在主要用Python所以就用Python实现,其实Java、C++也都很好实现,只是很长时间没写了,所以用Python实现。 TCP协议: 我们知道TCP协议(Transmission Control Protocol, 传输控制协议)是一种面向连接的传输层通信协议,它能提供高可靠性通信,像HTT

quanhujing的专栏 1万+

python利用tcp搭建小的聊天室带文件传输

python利用tcp搭建小的聊天室(附带文件传输) 学python也一段时间了,整合一下最近学习的内容的 利用tcp搭建小的聊天室 利用多线程来实现可以同时接受与发送消息,互相发送文件(文件夹,与图片还没做) 同时接入了图灵机器人能够做一些最初级的自动回复 ## server服务器端 import threading import time from socket import * impor...

weixin_43685407的博客 3320

基于Python实现文件传输

【代码】基于Python实现文件传输。

qq_45305583的博客 909

【Python】局域网内创建服务器和客户端程序并进行文件传输(TCP协议)

目录 1.什么是TCP? 1.1  TCP概念   1.2  TCP的优缺点 1.3 TCP的使用场景 1.4 TCP需要注意的点 2.客户端 3.服务端 4.运行效果 1.什么是TCP? 1.1  TCP概念   TCP:英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议.。 TC...

高岩 is me 6391

python3 tcp 文件传输源码

tcp文件传输 from socket import * s=socket() s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) s.bind((‘0.0.0.0’,4561)) s.listen(3) faddr=input(‘请输入文件地址’) f=open(faddr,’wb’) print(‘等待连接’) ...

东方佑 3万+

Python实现文件传输功能——sendfile

在网络应用中,文件传输功能是非常常用的,那么在Python中如何实现这一功能呢?首先需要创建一个发送端,用于将要传输的文件发送出去。在发送端中,需要指定文件的路径和ip地址、端口号。接着需要创建接收端,用于接收发送端发送的文件。同样,在接收端中,需要指定ip地址和端口号。通过以上步骤,我们就实现了Python中文件传输功能的基本实现。host = ‘127.0.0.1’ # 定义主机ip地址。host = ‘127.0.0.1’ # 定义主机ip地址。port = 12345 # 定义端口号。

持续更新 2508

Python socket之TCP通信、下载文件

TCP简介TCP介绍TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。TCP通信需要经过创建连接、数据传送、终止连接三个步骤。TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,“打电话”TCP特点1. 面向连接通信双方必须先建立连接才能进行数据的传输。

拥抱具身智能,昇腾Ascend C 1729

python tcp_python实现TCP文件传输

前几天已经讲过了UDP协议下大文件传输的python实现代码,今天再实现TCP协议下大文件传输的python实现代码。TCP和UDP的实现过程还是比较不一样的。实现代码:服务端:import socketimport times = socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.bind(('127.0.0.1',9999))s.listen(...

weixin_39624461的博客 311

TCP Socket网络文件传输实践

传输控制协议(TCP)是面向连接的、可靠的、基于字节流的传输层通信协议。它位于IP协议之上,为应用程序提供可靠的数据传输服务。TCP通过三次握手建立连接,确保双方都是可达的,并且连接稳定。数据传输过程中,TCP通过序列号和确认应答保证数据的有序和可靠传输。此外,TCP还提供流量控制和拥塞控制机制,以避免网络拥塞和数据丢失。最后,TCP在数据传输结束后通过四次挥手断开连接,确保所有数据都已经被正确传输。在开发基于TCP协议的文件传输客户端时,合理的连接策略是成功传输文件的关键。

weixin_33245447的博客 984

初学python网络编程socket,并实现文件传输【含源代码】

Socket什么是Socketsocket()函数socket 对象内建方法实例:实现文件传输实例演示:源代码:最后 什么是Socket socket又称“套接字”, 应用程序通常通过“套接字”向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。 socket()函数 Python 中,我们用 socket()函数来创建套接字,语法格式如下: socket.socket(family, type, protocol) 参数: family: 套接字家族可以使AF_UNIX或者AF_

全 洛的博客 4721

360加固DEX解密与ELF修复技术解析

本文深入解析了360加固APK的逆向分析技术,重点探讨了其DEX解密与ELF文件修复的核心流程。通过动态调试与Frida脚本,详细拆解了壳的启动机制、反调试绕过、自实现Linker技术,并还原了基于RC4和自定义算法的多层DEX解密过程,为移动安全研究人员提供了实用的实战分析思路。

alice7model的博客 701

Windows下玩转Spark:零基础本地集群搭建与实战演示

本文详细介绍了在Windows系统下零基础搭建Spark本地集群的完整流程,包括环境准备、集群启动、实战案例演示及性能优化技巧。通过Standalone模式快速部署,结合WordCount等经典案例帮助初学者快速掌握Spark数据处理,特别适合Windows环境下的大数据开发入门学习。

weixin_33734785的博客 425

利用TCP、UDPsocket实现文件传输(带GUI界面)

利用socket实现简单的文件传输

weixin_48661059的博客 4451

MATLAB不能识别已安装的visual studio 2015解决方法

首先,对于MATLAB识别已经安装的vs版本通过命令: mex -setup 下图为本电脑下同时安装的两个visual studio 如果搞清楚MATLAB识别电脑上安装vs的过程,可通过命令: mex -setup -v MATLAB输出识别编译器的整个过程。其中HKLM和HKCU分别是注册表中的HKEY_CURRENT_USER,HKEY_LOCAL_MA…的缩写,MATLAB没有找到对应编译器是由于注册表里没有对应信息(主要是文件路径,C++编译器的路径),或者在注册表里存在该信息,但是找不到

qq_36320710的博客 4896

python实现模拟FTP文件传输

由于最近在做计算机网络课程设计,了解了一些基本的网络通信协议以及一些网络通信基本原理之后,由于又恰好在学习python,所以不妨产生了用python实现模拟FTP登录过程,类似于相同的ssh协议(远程登陆协议)与FTP实现过程如出一辙。最近也有很长时间没有继续学习了,仅以此篇作为记录。文件传送协议FTP(FileTransferProtocol)是TCP/IP体系的一个重要协议,它采用Internet标准文件传输协议FTP的用户界面,向用户提供了一组用来管理计算机之间文件传输的应用程序。......

qq_52683550的博客 4268

【CloudCompare教程】017:点云快速全局配准

点云数据的配准分为基于特征(特征点、特征线)的拼接和无特征拼接。特征点匹配的方法和全局ICP的方法。特征点的方法通过全局特征匹配达到全局配准,全局ICP的方法通过对变量空间进行搜索的方法达到全局最优解。

智慧空间实验室 3929

揭秘LLM如何预测下一个词

Transformer结构的大语言模型(LLM)通过自回归训练学习预测下一个词汇,其核心能力源自权重矩阵的动态优化。自注意力层的Wq/Wk/Wv矩阵捕捉语义关联,前馈网络的W1/W2矩阵进行非线性特征提取,LM Head的W_{lm}矩阵将语义映射到词汇概率。训练过程中,这些矩阵通过反向传播不断调整,最终使模型能够根据上下文(如"我"→"爱")生成合理的后续词汇。这种基于矩阵变换的数学机制是LLM智能生成文本的本质原因。(150字)

ZhangJiqun&191cm&85kg 376

python socket 局域网文件传输_python使用tcp实现局域网内文件传输

本文为大家分享了python使用tcp实现局域网内文件传输的具体代码,供大家参考,具体内容如下功能:可以利用python创建的TCP客户端从我们自己搭建的TCP服务器上下载文件。实现需求:安装socket模块简单了解sokcet模块用法服务器代码如下:import socketdef file_deal(file_name):# 定义函数用于处理用户索要下载的文件try:# 二进制方式读取file...

weixin_39654058的博客 320

指纹浏览器指纹工厂(下):基于真实设备数据特征的马尔可夫链生成与校验

本文揭示了静态指纹生成算法在高级风控时序追踪下的致命缺陷,指出违背设备演进马尔可夫性质(如无状态跳跃、因果断裂)是导致指纹存活率骤降的核心原因。通过分析风控系统的时序状态机与多维特征验证机制,提出基于隐马尔可夫模型(HMM)的动态指纹架构:以真实设备的状态转移链为蓝本,构建异步演进的“数字基因熔炉”,通过非均匀时间步长、突发事件响应及微观因果绑定,模拟软硬件独立更新的物理法则。最终实现指纹在时间维度与微观特征上的自洽,规避风控的时序陷阱。

数据知道的博客 417

python上传图片到服务器 tcp_python使用tcp实现局域网内文件传输

本文为大家分享了python使用tcp实现局域网内文件传输的具体代码,供大家参考,具体内容如下功能:可以利用python创建的TCP客户端从我们自己搭建的TCP服务器上下载文件。实现需求:安装socket模块简单了解sokcet模块用法服务器代码如下:import socketdef file_deal(file_name):# 定义函数用于处理用户索要下载的文件try:# 二进制方式读取file...

weixin_39827304的博客 176

YOLO26 数据标注工具:LabelImg、Label Studio实战指南:主流标注工具的安装配置与使用技巧,高效完成目标检测数据标注

本文介绍了目标检测中数据标注的核心地位与常用工具。数据标注质量直接影响模型性能,需要关注准确性、一致性等维度。文章详细讲解了边界框、类别标签等基本概念,并对比了LabelImg、Label Studio等主流标注工具的特点。重点介绍了LabelImg的轻量级、易用性等优势,以及Label Studio的协作功能,为不同规模项目提供标注工具选择建议。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1177

从被秒封到稳过Cloudflare!Canvas/WebGL/WebRTC多维度浏览器指纹隐身全实战

反爬和反反爬,本质上是一场持续的博弈,没有100%的隐身,只有不断升级的伪装。网上很多教程只给了个基础的噪声代码,却没讲透反爬的检测逻辑,导致你用了还是被封。这套方案的核心,不是简单的API重写,而是站在反爬的角度,模拟真实用户的所有特征,保证所有指纹的一致性、合理性、完整性。目前这套方案我用了半年,跑了上千万次请求,稳过国内国外99%的主流反爬平台,没有出现过一次因为指纹关联导致的批量封禁。大家有什么更狠的反爬场景,或者更好的伪装技巧,欢迎评论区一起交流。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1194
上一篇: Splunk对接企业微信自定义SPL命令
下一篇: Kubernetes实验 Pod
白M
博客等级 码龄10年 49粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值