热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python发送文件_python通过socket发送文件的实例代码

目录结构:client:#!usrbinenvpython#-*-coding:utf-8-*-importsocket,struct,jsondownloa

目录结构:

2018081415074345.png

client:

#!/usr/bin/env python

# -*-coding:utf-8 -*-

import socket, struct, json

download_dir = r'D:\Python\python_learning\gd\code\part3\02网络编程\文件传输\client\download'

gd_client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

gd_client.connect(('127.0.0.1',8123))

while True:

#1、发命令

cmd=input('>>: ').strip() #get a.txt

if not cmd:continue

gd_client.send(cmd.encode('utf-8'))

#2、以写的方式打开一个新文件,接收服务端发来的文件的内容写入客户的新文件

#第一步:先收报头的长度

obj=gd_client.recv(4)

header_size=struct.unpack('i',obj)[0]

# 第二步:再收报头

header_bytes = gd_client.recv(header_size)

# 第三步:从报头中解析出对真实数据的描述信息

header_json = header_bytes.decode('utf-8')

header_dic = json.loads(header_json)

'''

header_dic = {

'filename': filename, # 1.txt

'file_size': os.path.getsize(r'%s\%s' % (share_dir, filename)) # 路径/1.txt

}

'''

total_size = header_dic['file_size']

file_name = header_dic['filename']

# 第四步:接收真实的数据

with open(r'%s\%s'%(download_dir, file_name),'wb') as f:

recv_size = 0

while recv_size

line = gd_client.recv(1024)

f.write(line)

recv_size += len(line)

print('总大小:%s 已下载大小:%s' % (total_size, recv_size))

gd_client.close()​

server:

#!/usr/bin/env python

# -*-coding:utf-8 -*-

import socket

import subprocess

import struct

import json

import os

share_dir = r'D:\Python\python_learning\gd\code\part3\02网络编程\文件传输\server\share'

gd_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

gd_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

gd_server.bind(('127.0.0.1', 8123)) # 0-65535: 0-1024给操作系统使用

gd_server.listen(5)

while True:

conn, client_addr = gd_server.accept()

while True: # 通信循环

try:

# 1、收命令

res = conn.recv(8096) # b'get 1.txt'

if not res: break # 适用于linux操作系统

# 2、解析命令,提取相应命令参数

cmds = res.decode('utf-8').split() # ['get','1.txt']

filename = cmds[1]

# 3、以读的方式打开文件,读取文件内容发送给客户端

# 第一步:制作固定长度的报头

header_dic = {

'filename': filename, # 1.txt

'file_size':os.path.getsize(r'%s\%s'%(share_dir, filename)) # 路径/1.txt

}

header_json = json.dumps(header_dic)

header_bytes = header_json.encode('utf-8')

# 第二步:先发送报头的长度

conn.send(struct.pack('i',len(header_bytes)))

# 第三步:再发报头

conn.send(header_bytes)

# 第四步:再发送真实的数据

with open('%s/%s'%(share_dir, filename),'rb') as f:

for line in f:

conn.send(line)

except ConnectionResetError: # 适用于windows操作系统

break

conn.close()

gd_server.close()​

命令输入: get 1.txt ,然后即可将 server 端的 share文件内的 1.txt 文件 发送到 client 端的 download文件夹下

图片、视频、文字都可以发送,因为传送的是 二进制文件

原理是:server 端以读的形式打开文件,client端以写 的方式打开文件,然后client端把 一条一条的二进制写入文件后保存即可。

总结

以上所述是小编给大家介绍的python 通过 socket 发送文件的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!



推荐阅读
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • Zabbix自定义监控与邮件告警配置实践
    本文详细介绍了如何在Zabbix中添加自定义监控项目,配置邮件告警功能,并解决测试告警时遇到的邮件不发送问题。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 本文详细介绍了在Windows系统中如何配置Nginx以实现高效的缓存加速功能,包括关键的配置文件设置和示例代码。 ... [详细]
  • OBS Studio自动化实践:利用脚本批量生成录制场景
    本文探讨了如何利用OBS Studio进行高效录屏,并通过脚本实现场景的自动生成。适合对自动化办公感兴趣的读者。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
  • 本文将详细探讨 Python 编程语言中 sys.argv 的使用方法及其重要性。通过实际案例,我们将了解如何在命令行环境中传递参数给 Python 脚本,并分析这些参数是如何被处理和使用的。 ... [详细]
  • HBase 数据复制与灾备同步策略
    本文探讨了HBase在企业级应用中的数据复制与灾备同步解决方案,包括存量数据迁移及增量数据实时同步的方法。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • 对于初学者而言,搭建一个高效稳定的 Python 开发环境是入门的关键一步。本文将详细介绍如何利用 Anaconda 和 Jupyter Notebook 来构建一个既易于管理又功能强大的开发环境。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
author-avatar
手机用户2502855061
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有