热门标签 | 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 发送文件的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!



推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
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社区 版权所有