用python程序发送文件(python实例二十六)

news2024/11/16 10:56:25

目录

1.认识Python

2.环境与工具

2.1 python环境

2.2 Visual Studio Code编译

3.文件上传

3.1 代码构思

3.2 服务端代码

 3.3 客户端代码

 3.4 运行结果

4.总结


1.认识Python

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。

Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字或标点符号,它具有比其他语言更有特色的语法结构。

2.环境与工具

2.1 python环境

在Windows上使用命令行窗口查看所安装的python版本

python --version

2.2 Visual Studio Code编译

Visual Studio Code是一款由微软开发且跨平台的免费源代码编辑器。该软件以扩展的方式支持语法高亮、代码自动补全、代码重构功能,并且内置了命令行工具和Git 版本控制系统。

3.文件上传

3.1 代码构思

建立一个文件上传程序,服务端通过IP:端口上传本地文件到服务器,然后客户端接收,使用socket套接字对象连接,用TCP协议传输信息。

3.2 服务端代码

服务端:搭建一个TCP服务器,上传文件。

import socket
import struct

def send_file(filename, host='127.0.0.1', port=9999):
    try:
        # 创建一个 TCP/IP 套接字
        socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        socket_server.bind((host, port))
        socket_server.listen()

        print(f"服务端开始监听 {host}:{port}...")

        while True:
            # 链接
            socket_conn, addr = socket_server.accept()
            print(f"Connected by {addr}")

            try:
                with open(filename, 'rb') as f:
                    text_content = f.read()
                
                txt_len = len(text_content)

                # 发送文件长度
                socket_conn.send(struct.pack('i', txt_len))
                
                # 文件信息
                socket_conn.send(text_content)

                print(f"Sent {filename} ({txt_len} bytes) to {addr}")

            except FileNotFoundError:
                print(f"File {filename} 没有找到。")
                socket_conn.send(struct.pack('i', 0))
            except Exception as e:
                print(f"Error: {e}")
            finally:
                socket_conn.close()
                print(f"链接 {addr} 已关闭。")

    except Exception as e:
        print(f"错误: {e}")
    finally:
        socket_server.close()
        print("服务端关闭。")

if __name__ == '__main__':
    send_file('./pythonProject/1.txt')                #文件路径

 3.3 客户端代码

客户端:客户端代码与服务器建立 TCP 连接,接收文件并保存该文件。

import socket
import struct

def receive_file(filename, host='127.0.0.1', port=9999):
    try:
        # 创建一个 TCP/IP 套接字
        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client_socket.connect((host, port))
        print(f"连接到 {host}:{port}")

        # 获取文件长度
        txt_len = struct.unpack('i', client_socket.recv(4))[0]
        print(f"获得 {txt_len} bytes")

        if txt_len == 0:
            print(f"没有获取到文件,服务端可能不存在")
            return

        # 打开文件,并进行写操作
        with open(filename, 'wb') as fp:
            recv_len = 0
            while recv_len < txt_len:
                recv_txt = client_socket.recv(1024)
                recv_len += len(recv_txt)
                fp.write(recv_txt)
            print(f"获得 {recv_len} bytes. 文件: {filename} 写入成功.")

    except Exception as e:
        print(f"Error: {e}")
    finally:
        client_socket.close()
        print("客户端关闭。")

if __name__ == '__main__':
    receive_file('1.txt')                #接收的文件保存路径与名称

 3.4 运行结果

首先运行服务端代码打开,然后运行客户端代码用于接收文件。

4.总结

此程序呈现出了局域网内文件传输的典型示例,方便大家理解局域网内文件传输的底层逻辑。

你也快来试试吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1948870.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SqlSugar删除没有定义主键的实体类对应的数据库表数据

一般而言&#xff0c;使用SqlSugar的DbFirst功能创建数据库表实体类时&#xff0c;如果数据库表有主键&#xff0c;生成的实体类对应属性也会标识为主键&#xff0c;如下图所示。   但有时候生成的实体类没有自动配置主键&#xff0c;这时可以通过以下方式进行删除操作&…

littlefs文件系统的移植和测试

简介 LittleFS 由ARM官方发布&#xff0c;ARM mbedOS的官方推荐文件系统&#xff0c;具有轻量级&#xff0c;掉电安全的特性。主要用在微控制器和flash上 掉电恢复&#xff0c;在写入时即使复位或者掉电也可以恢复到上一个正确的状态。 擦写均衡&#xff0c;有效延长flash的使…

微软蓝屏事件:网络安全的多维挑战与应对策略

一、引言 1. 事件概述&#xff1a;微软蓝屏事件的影响与范围 微软蓝屏事件&#xff0c;这一近期震动全球科技界的重大事件&#xff0c;起因于一次看似平常的软件更新。美国电脑安全技术公司“众击”发布的更新包中隐藏着一个致命的“缺陷”&#xff0c;这个缺陷如同潜伏的病毒…

goland设置Gin框架中tmpl模板的语法提示的方法

goland设置Gin框架中tmpl模板的语法提示的方法 前言 在Gin中&#xff0c;我们要使用 .tmpl 结尾的模板文件&#xff0c;但是我们在new的时候&#xff0c;发现没有对应的文件&#xff0c;所以它就会被当成普通的文件来进行解析&#xff0c;因此也没有提示&#xff0c;这对我们…

MySQL --- 表的操作

在对表进行操作时&#xff0c;需要先选定操作的表所在的数据库&#xff0c;即先执行 use 数据库名; 一、创建表 create table 表名( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎 ; 说明&#xff1a…

个性化音频生成GPT-SoVits部署使用和API调用

一、训练自己的音色模型步骤 1、准备好要训练的数据&#xff0c;放在Data文件夹中&#xff0c;按照文件模板中的结构进行存放数据 2、双击打开go-webui.bat文件&#xff0c;等待页面跳转 3、页面打开后&#xff0c;开始训练自己的模型 &#xff08;1&#xff09;、人声伴奏分…

Mac文件拷贝到移动硬盘怎么做Mac拷贝之后Win电脑里看不到

在日常使用mac电脑的过程中&#xff0c;我们经常需要将一些重要的文件备份到外部硬盘上&#xff0c;以防止数据丢失或电脑故障。传输文件到硬盘可以通过多种方法实现&#xff0c;比如拖拽或者复制至移动硬盘&#xff0c;但有时也会遇到移动硬盘无法粘贴&#xff0c;或拷贝后无法…

FastAPI(七十五)实战开发《在线课程学习系统》接口开发-- 创建课程

源码见&#xff1a;"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 上次我们分享了&#xff0c;FastAPI&#xff08;七十四&#xff09;实战开发《在线课程学习系统》接口开发-- 删除留言 从本篇文章开始&#xff0c;…

DVWA中命令执行漏洞细说

在攻击中&#xff0c;命令注入是比较常见的方式&#xff0c;今天我们细说在软件开发中如何避免命令执行漏洞 我们通过DVWA中不同的安全等级来细说命令执行漏洞 1、先调整DVWA的安全等级为Lower,调整等级在DVWA Security页面调整 2、在Command Injection页面输入127.0.0.1&…

Gitlab以及分支管理

一、概述 Git 是一个分布式版本控制系统&#xff0c;用于跟踪文件的变化&#xff0c;尤其是源代码的变化。它由 Linus Torvalds 于 2005 年开发&#xff0c;旨在帮助管理大型软件项目的开发过程。 二、Git 的功能特性 Git 是关注于文件数据整体的变化&#xff0c;直接会将文件…

视频去水印免费电脑版 pdf压缩在线免费网页版 pdf压缩在线免费 简单工具软件详细方法步骤分享

消除视频中的恼人水印&#xff0c;是许多视频编辑爱好者的常见需求。在这篇文章中&#xff0c;我们将探讨几种视频去水印的技巧&#xff0c;在数字化时代&#xff0c;视频和图片的传播越来越方便&#xff0c;但随之而来的水印问题也让人头疼。本文将为您详细介绍视频剪辑去水印…

CTF-Web习题:[GXYCTF2019]Ping Ping Ping

题目链接&#xff1a;[GXYCTF2019]Ping Ping Ping 解题思路 访问靶机&#xff0c;得到如下页面&#xff0c;类似于URL参数 尝试用HackBar构造url传输过去看看 发现返回了ping命令的执行结果&#xff0c;可以猜测php脚本命令是ping -c 4 $ip&#xff0c;暂时不知道执行的函数…

JavaScript(15)——操作表单元素属性和自定义属性

操作表单元素属性 表单很多情况&#xff0c;也需要修改属性&#xff0c;比如点击眼睛可以看到密码&#xff0c;本质是把表单类型转换为文本框正常的有属性有取值的&#xff0c;跟其他的标签属性没有任何区别 获取&#xff1a;DOM对象.属性名 设置&#xff1a;DOM对象.属性名…

【OpenCV C++20 学习笔记】操作图片

操作图片 概述图片的导入和保存对导入的图片的操作获取像素值Point类型和图片像素 内存管理和引用计数一些简便操作图片可视化更精确的类型转换 概述 在本专栏的第一篇文章中就介绍了一个用OpenCV处理图片的实例&#xff08;《图片处理基础》&#xff09;&#xff0c;这篇文章…

【LeetCode】141.环形链表、142. 环形链表 II(算法 + 图解)

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;数据结构 &#x1f4da;本系列文章为个人学…

基于PyCharm在Windows系统上远程连接Linux服务器中Docker容器进行Python项目开发与部署

文章目录 摘要项目结构项目开发项目上线参考文章 摘要 本文介绍了如何在Windows 10系统上使用PyCharm专业版2024.1&#xff0c;通过Docker容器在阿里云CentOS 7.9服务器上进行Python项目的开发和生产部署。文章详细阐述了项目结构的搭建、PyCharm的使用技巧、以及如何将开发项…

C#/WinFrom TCP通信+ 网线插拔检测+客服端异常掉线检测

Winfor Tcp通信(服务端) 今天给大家讲一下C# 关于Tcp 通信部分&#xff0c;这一块的教程网上一大堆&#xff0c;不过关于掉网&#xff0c;异常断开连接的这部分到是到是没有多少说明&#xff0c;有方法 不过基本上最多的两种方式&#xff08;1.设置一个超时时间&#xff0c;2.…

Python爬虫技术 第13节 HTML和CSS选择器

在爬虫技术中&#xff0c;解析和提取网页数据是核心部分。HTML 和 CSS 选择器被广泛用于定位网页中的特定元素。下面将详细介绍这些选择器如何在 Python 中使用&#xff0c;特别是在使用像 Beautiful Soup 或 Scrapy 这样的库时。 HTML 选择器 HTML 选择器基于 HTML 元素的属性…

Llama 3.1和xAI超集群加速AI军备竞赛

LLama 3.1 先来看看LLama 3.1 405B的效果&#xff0c;例如输入生成上海印象的四连图&#xff0c;然后一键再生成短视频&#xff0c;整体还是可圈可点。 从下面的各项基准而言&#xff0c;LLama3.1系列在同等量级中均有不俗的表现&#xff0c;尤其是405B已经和闭源的GPT-4o不分…

内网横向:PTHPTKPTT

1.PHT横向 2.PTK横向 3.PTT横向 1.PHT横向&#xff1a; 条件&#xff1a;有管理员的NTLM Hash 并且目标机器开 放445端口 在工作组环境中&#xff1a; Windows Vista 之前的机器&#xff0c;可以使用本地管理员组内用户进行攻击。 WindowsVista 之后的机器&#xff0c;只能是…