首页
Linux教程
Linux资讯
Linux入门
Linux运维
Linux系统
Linux服务器
Linux安全
Linux问答
SHELL
树莓派
正则
linux命令
安装
Linux监控
运维自动化
Ansible
Piwik
CentOS
Deepin
Ubuntu
Debian
FreeBSD
Nginx
Apache
openresty
Tengine
宝塔
SSH
页面位置:
Linuxboy
>
Linux教程
>
正文
python
Python socket上传文件的服务端和客户端实现
文章由LinuxBoy分享于2019-04-01 12:04:44
热评(61)
Python socket上传文件的服务端和客户端实现
代码均已测试:希望高人能指点一二
服务端:
#coding=gbk
''
'''
等待连接
等待发送文件
读取数据
写入文件并且保存
等待连接
'''
import
socket
import
threading
import
time
import
struct
def
function(newsock, address):
FILEINFO_SIZE = struct.calcsize(
'128sI'
)
''
'''定义文件信息(包含文件名和文件大小)大小。128s代表128个char[](文件名),I代表一个integer or long(文件大小)'''
while
1
:
try
:
fhead = newsock.recv(FILEINFO_SIZE)
filename, filesize = struct.unpack(
'128sI'
, fhead)
''
'''把接收到的数据库进行解包,按照打包规则128sI'''
print
"address is: "
,address
print
filename, len(filename),type(filename)
print
filesize
filename =
'new_'
+filename.strip(
'\00'
)
#命名新文件new_传送的文件
fp = open(filename,
'wb'
)
#新建文件,并且准备写入
restsize = filesize
print
"recving..."
while
1
:
if
restsize >
1024
:
#如果剩余数据包大于1024,就去1024的数据包
filedata = newsock.recv(
1024
)
else
:
filedata = newsock.recv(restsize)
fp.write(filedata)
break
if
not
filedata:
break
fp.write(filedata)
restsize = testsize - len(filedata)
#计算剩余数据包大小
if
restsize <=
0
:
break
fp.close()
print
"recv succeeded !!File named:"
,filename
except
:
print
"he socket partner maybe closed"
newsock.close()
break
sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#创建tcp连接
sock.bind((
'127.0.0.1'
,
8887
))
#定于端口和ip
sock.listen(
5
)
#监听
while
True
:
newsock, address = sock.accept()
print
"accept another connection"
tmpThread = threading.Thread(target=function,args=(newsock,address))
#如果接收到文件,创建线程
tmpThread.start()
#执行线程
print
'end'
客户端:
#coding=gbk
''
'''
输入文件名,并且上传
'''
import
socket
import
time
import
struct
import
os
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.settimeout(
1
)
e=
0
try
:
sock.connect((
'127.0.0.1'
,
8887
))
print
'connect...'
except
socket.timeout,e:
print
'timeout'
,e
except
socket.error,e:
print
'error'
,e
except
e:
print
'any'
,e
if
not
e:
while
(
1
):
filename = raw_input(
'input your filename------->'
)
#输入文件名
FILEINFO_SIZE = struct.calcsize(
'128sI'
)
#编码格式大小
fhead = struct.pack(
'128sI'
,filename,os.stat(filename).st_size)
#按照规则进行打包
sock.send(fhead)
#发送文件基本信息数据
fp = open(filename,
'rb'
)
while
1
:
#发送文件
filedata = fp.read(
1024
)
if
not
filedata:
break
sock.send(filedata)
print
"sending over..."
fp.close()
相关内容
Python socket向百度发送http长连接请求 并做搜索
Python ftp 文件上传和文件下载
Python 3.x之数据库框架Sqlalchemy操作SQlite
在Python 2.7下面使用webpy框架
Python MongoDB相关操作
在Python 中调用Dll
Python中Range和XRange的区别
Python ftp操作脚本&常用函数
Python dataformat.py通用数据格式转化脚本
Python获取rpm包基本信息[import rpm]
今日最新
推荐文章:
Python socket向百度发送http长连接请求 并做搜索
Python ftp 文件上传和文件下载
Python 3.x之数据库框架Sqlalchemy操作SQlite
在Python 2.7下面使用webpy框架
Python MongoDB相关操作
在Python 中调用Dll
评论暂时关闭
最新Linux教程教程
Python socket上传文件的服务端和客
Python socket向百度发送http长连接
Python ftp 文件上传和文件下载
php ftp类
jQuery操作DOM
jQuery中添加自定义或函数方法
Linux头条
Broadcom推出用于汽车网络的以太
linux-3.6.6重新移植LCD及触摸屏驱
X264的调试与移植
Linux中grep命令用法详解
ARM 平台上的Linux系统启动流程
Cisco无边界网络只是在玩文字游
评论暂时关闭