socket实现文件传输
server:
===========================================
import socket
import struct
import json
sk = socket.socket()
sk.bind(('127.0.0.1',8989))
sk.listen() conn,addr = sk.accept() resv_size = conn.recv(4) #会儿收到报头的大小,经过struct转码的字节码
dic_size = struct.unpack('i',resv_size)[0] # 对字节码转码,得到报头的大小
bytes_head = conn.recv(dic_size) # 接收bytes类型的报头
head = json.loads(bytes_head.decode('utf-8')) # 真正的报头
filesize = head['filesize'] # 传输文件大小
buffer = 1024
with open(head['filename'],'wb') as f:
while True:
if filesize >= buffer:
content = conn.recv(buffer)
# 打开文件,写入本地
f.write(content)
filesize -= buffer
else:
content = conn.recv(filesize)
# 打开文件,写入本地
f.write(content)
break
conn.close()
sk.close() ===============================================================================
client
==================================================================
import socket
import os
import struct
import json
sk = socket.socket()
sk.connect(('127.0.0.1',8989))
dic = {'filepath':r'E:\常用软件\pandownload\pan下载数据\day32',
'filesize':None,
'filename':'04 python fullstack s9day32 struct模块补充.mp4'}
path = os.path.join(dic['filepath'],dic['filename'])
dic_size = os.path.getsize(path)
dic['filesize'] = dic_size
dic_json = json.dumps(dic) #字典转成字符串
# print(dic['filesize'])
bytes_head = dic_json.encode('utf-8')
send_size = struct.pack('i',len(bytes_head))
sk.send(send_size)
sk.send(bytes_head)
buffer = 1024
with open(path,'rb') as f:
while dic_size:
if dic_size >= buffer:
content = f.read(buffer)
sk.send(content)
dic_size -= buffer
else:
content = f.read(dic_size)
sk.send(content) break sk.close()
socket实现文件传输的更多相关文章
- 洗礼灵魂,修炼python(86)--全栈项目实战篇(12)—— 利用socket实现文件传输/并发式聊天
由于本篇博文的项目都很简单,所以本次开个特例,本次解析两个项目,但是都很简单的 项目一:用socket实现文件传输 本项目很简单,作为小项目的预热的,前面刚学完socket,这里马上又利用socket ...
- Java简单文件传输 socket简单文件传输示例
服务器端代码: import java.io.*; import java.net.*; /** * Created with IntelliJ IDEA. * User: HYY * Date: 1 ...
- python socket实现文件传输(防粘包)
1.文件传输的要点: 采用iterator(迭代器对象)迭代读取,提高读取以及存取效率: 通过for line in file_handles逐行conn.send(): 2.socket粘包问题: ...
- Java开发笔记(一百一十五)使用Socket开展文件传输
前面介绍了怎样通过Socket在客户端与服务端之间传输文本,当然Socket也支持在客户端与服务端之间传输文件,因为文件本身就是通过I/O流实现读写操作的,所以在套接字的输入输出流中传输文件真是再合适 ...
- Java学习笔记——Socket实现文件传输
我越是逃离,却越是靠近你. 我越是背过脸,却越是看见你. 我从你开始, 我在你结束. 需求:实现局域网下socket传输文件. 客户端步骤: 1.建立与服务器的连接 2.创建client输出流 3.创 ...
- JAVA Socket:文件传输
客户端:读取文件(FileInputStream),发送文件(OutputStream) 服务器端:接收文件(InputStream),写文件(FileOutputStream) 客户端代码: pac ...
- windows环境下使用C++&Socket实现文件传输
server #include <stdio.h> #include <iostream> #include <cstring> #include <fstr ...
- Java基于Socket文件传输示例(转)
最近需要进行网络传输大文件,于是对基于socket的文件传输作了一个初步的了解.在一位网友提供的程序基础上,俺进行了一些加工,采用了缓冲输入/输出流来包装输出流,再采用数据输入/输出输出流进行包装,加 ...
- Java基于Socket文件传输示例
http://www.blogjava.net/sterning/archive/2007/10/13/152508.html 最近需要进行网络传输大文件,于是对基于socket的文件传输作了一个初步 ...
随机推荐
- springboot中Properties注解的实现
关于@PropertySources注解的理解:http://www.imooc.com/article/252889?block_id=tuijian_wz public interface Pro ...
- java基础编程
java的类和常用编程模式还是要多练习,多手写java代码 return new String(filecontent, encoding); 看懂这个意思了吗?第一次见这个构造函数吧,而String ...
- python简述
python男神:龟叔 三,python基础初识. 1,运行python代码. 在d盘下创建一个t1.py文件内容是: print('hello world') 打开windows命令行输入cmd,确 ...
- M - COURSES
Consider a group of N students and P courses. Each student visits zero, one or more than one courses ...
- nginx_ssl_tomcat配置
<Connector port="8090" protocol="HTTP/1.1" connectionTimeout="20000" ...
- Intellij IDEA 生成返回值对象快捷键
在编写一行JAVA语句时,有返回值的方法已经决定了返回对象的类型和泛型类型,我们只需要给这个对象起个名字就行. 如果使用快捷键生成这个返回值,我们就可以减少不必要的打字和思考,专注于过程的实现. 步骤 ...
- 数组/Array/Tuple/yield
数组 如果需要使用同一类型的多个对象,就可以考虑使用集合和数组.如果需要使用不同类型的多个对象,可以考虑使用Tuple(元组) 数组的声明 在声明数组时,应先定义数组元素中的类型,其后是一对空方括号和 ...
- intellij idea 的全局搜索快捷键方法
1.Ctrl+N按名字搜索类 相当于eclipse的ctrl+shift+R,输入类名可以定位到这个类文件,就像idea在其它的搜索部分的表现一样,搜索类名也能对你所要搜索的内容多个部分进行匹配,而且 ...
- 判断是手机请求还是pc请求
网址 http://detectmobilebrowsers.com/ string u = Request.ServerVariables["HTTP_USER_AGENT"]; ...
- python发送html格式的邮件
python发邮件 #!/usr/bin/python # -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMET ...