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

目录

1.认识Python

2.环境与工具

[2.1 python环境](#2.1 python环境)

[2.2 Visual Studio Code编译](#2.2 Visual Studio Code编译)

3.文件上传

[3.1 代码构思](#3.1 代码构思)

[3.2 服务端代码](#3.2 服务端代码)

[3.3 客户端代码](#3.3 客户端代码)

[3.4 运行结果](#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.总结

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

你也快来试试吧!

相关推荐
阿童木写作1 小时前
跨境电商图片翻译工具推荐:批量图片翻译+视频字幕翻译+智能抠图
python·macos·音视频·xcode
cui_ruicheng2 小时前
LangChain 应用开发(十四):Agent 上下文与记忆机制
服务器·人工智能·python·langchain
论迹复利2 小时前
FreeRTOS 在 RISC-V 上是如何“点火“的 —— 从 main() 到第一个任务的完整链路
java·开发语言·risc-v
circuitsosk2 小时前
任务规划器的三种范式对比:ReAct、Plan-and-Execute 与 Tree-of-Thought 在真实业务中的取舍
前端·javascript·python·react.js·llm·ai agent
张宇Joaquin2 小时前
鲲鹏统一并行加速库KUPL--众核并行能力介绍
java·开发语言·网络
736c2 小时前
C语言-数组 07
c语言·开发语言
shehuiyuelaiyuehao2 小时前
算法31,前缀和,可被k整除的子数组
数据结构·python·算法
宸津-代码粉碎机3 小时前
AI攻防战升级!基于Spring AI构建Java应用自动免疫安全体系
java·大数据·开发语言·人工智能·python·安全·spring
测试19983 小时前
如何用appium搭建Android自动化测试框架?
自动化测试·软件测试·python·测试工具·职场和发展·appium·测试用例
程序员大雄学编程3 小时前
微积分46. 无穷级数四大核心性质:从理论到实践的全方位解析
python·学习·微积分·学习工具