python传文件到服务器_一个简单的python文件传输服务器

服务器 代码,可以兼容python2 和 python3

#!/usr/bin/python3

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

from socket import socket, AF_INET, SOCK_STREAM

class SimpleServer:

def startServer(self,port):

tcpSerSock=socket(AF_INET,SOCK_STREAM)

tcpSerSock.bind(("",port))

tcpSerSock.listen(5)

while True:

try:

print("server start! waiting connect...")

tcpCliSock,addr =tcpSerSock.accept()

print("from client " + addr[0])

while True:

filename_len = tcpCliSock.recv(1)

if not filename_len:

break

try:

filename_len = int(str(filename_len)) #python2

except:

filename_len = int(filename_len.decode()) #python3

filename = tcpCliSock.recv(filename_len).decode("utf8")

if(filename == "quit"):

tcpCliSock.close()

tcpSerSock.close()

return

with open(filename, 'wb') as f:

while True:

buf = tcpCliSock.recv(4096)

if not buf:

break

else:

f.write(buf)

print("recv ["+filename+"] ok!")

break

except:

pass

finally:

tcpCliSock.close()

tcpSerSock.close()

if __name__ == '__main__':

print("start server!")

s = SimpleServer()

s.startServer(1234)

print("end server!")

==============================================================

客户端 只在python3下试过  python应该是不行的

#!/usr/bin/python3

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

# 发送格式为 1字节的"文件名长度"+"文件名"+"二进制数据"

# 如果文件名是 quit 那就退出

import os

from socket import socket, AF_INET, SOCK_STREAM

target = ('127.0.0.1',1234)

class SimpleClient:

def setHost(self, host, port):

self.host = host

self.port = port

def __get_header (self,filename):

leng = len(filename) #文件名长度

assert leng<250

return str(leng) + filename #头部 就是 “1字节的长度”+“文件名”

def send(self,filepath):

#生成文件头

filename = os.path.basename(filepath)

header = self.__get_header(filename)

s = socket(AF_INET, SOCK_STREAM)

s.connect(target)

s.send((header).encode()) #先发送头部

if(filepath == "quit"):

print("close server over!!!")

pass

else:

with open(filepath, 'rb') as f: #读取数据发送

while True:

buf = f.read(4096)

if (len(buf)>0):

s.send(buf)

else:

break

print("send over!!!")

#            result = s.recv(256).decode()

#            print("result:"+result)

s.close()

if __name__ == '__main__':

c = SimpleClient()

c.setHost("127.0.0.1", 1234)

c.send("D:/testpy/data/a.jpg") # 发送文件

#    c.send("quit") #退出服务器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值