目录结构:

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

本文标题: python 通过 socket 发送文件的实例代码

本文地址: http://www.cppcns.com/jiaoben/python/237219.html

python怎么发送代码文件_python 通过 socket 发送文件的实例代码相关推荐

  1. python随机数程序源码_Python 实现随机数详解及实例代码

    Python3实现随机数 random是用于生成随机数的,我们可以利用它随机生成数字或者选择字符串. random.seed(x)改变随机数生成器的种子seed. 一般不必特别去设定seed,Pyth ...

  2. python批量生成图片并保存_Python批量生成幻影坦克图片实例代码

    前言 说到幻影坦克,我就想起红色警戒里的-- 幻影坦克(Mirage Tank),<红色警戒2>以及<尤里的复仇>中盟军的一款伪装坦克,盟军王牌坦克之一.是爱因斯坦在德国黑森林 ...

  3. python文本进度条代码解释_python动态文本进度条的实例代码

    如何实现动态单行刷新,答案是:覆盖 但是怎么实现覆盖呢? 关键在于不换行而且能回退到开始位置 那么就要用到 \r 这个东西就是让光标回退到当前行初始位置 记得不能让换行 代码片段:#文本进度条.py ...

  4. python socket 域名_python用socket发送http请求

    python用socket发送http请求 平时我们使用浏览器浏览web资源,写爬虫的时候,我们会使用封装好的库,比如requests,或者使用爬虫框架.工欲善其事必先利其器,顶层封装好的东西,是为了 ...

  5. java aio复制文件_java复制文件的4种方式及拷贝文件到另一个目录下的实例代码...

    尽管Java提供了一个可以处理文件的IO操作类. 但是没有一个复制文件的方法. 复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候. 然而有几种方法可以进行Java文件复制操作,下面列举出 ...

  6. python传输大文件_python之socket运用之传输大文件

    socket建议最大的传输单元是8192个字符,但是如果超过8192就会出现问题,我们可以用下面的方法处理 客户端代码 import subprocess import socket ip_bind ...

  7. python socket 大文件_python之socket运用之传输大文件

    socket建议最大的传输单元是8192个字符,但是如果超过8192就会出现问题,我们可以用下面的方法处理 客户端代码 import subprocess import socket ip_bind ...

  8. python博客源码下载_Python生成并下载文件后端代码实例

    txt文件 生成并下载txt文件: @app.route('/download', methods=['GET']) def download(): content = "long text ...

  9. python多人聊天室_Python基于Socket实现简易多人聊天室

    前言 套接字(Sockets)是双向通信信道的端点. 套接字可以在一个进程内,在同一机器上的进程之间,或者在不同主机的进程之间进行通信,主机可以是任何一台有连接互联网的机器. 套接字可以通过多种不同的 ...

最新文章

  1. tomcat项目快速启动设置
  2. VC++ MFC获取对话框上控件的位置
  3. 我用Python爬取了14年所有的福彩3D信息,彩民们,只能帮你们到这了
  4. SQL Azure十月份更新
  5. 台阶问题练习题 (简单的dp)
  6. python单元测试unittest
  7. 数据结构-栈(先进后出表)
  8. 背景图片,颜色变化脚本
  9. 视频消重伪原创有用吗 视频md5修改器最新
  10. Onvif客户端与服务器通信时鉴权的自实现
  11. 《Software Testing》英文原著阅读 单词
  12. 在线思维导图的制作教程分享,帮你快速掌握绘制要领
  13. TE TM TEM模的区别
  14. linux命令vi编辑文件注释掉某一行,请问linux的vi命令进入文本编辑后怎么去删除一行?...
  15. iOS锁屏界面音频播放控制
  16. js将字符串转换成数字的四种方法
  17. MMU的作用及工作过程
  18. 聊城市普通话水平测试软件音频,聊城市普通话水平测试培训-聊城市教师教育网.ppt...
  19. Unity3d中异形屏的适配
  20. waf怎么读_技术分享:杂谈如何绕过WAF(Web应用防火墙)

热门文章

  1. shell /dev/null
  2. CentOS7 通过代理上网
  3. 金蝶K/3 BOS产品培训教案
  4. 中国互联网+光伏逆变器行业商业模式创新与投资机会深度研究报告
  5. oracle11g分区表按时间自动创建
  6. 14/10/校内测试{天天考,丧心病狂}
  7. Java程序猿面试题集(181- 199)
  8. web server大全之GoAhead移植(转载)
  9. 命令行收集(DOS/Linux/nc/xscan/xsniffer)
  10. jenkins获取远程服务器文件,Jenkins用SSH传输文件到远程服务器