美文网首页python交流学习
一个简单的python文件传输服务器

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

作者: 78c40b03ee4e | 来源:发表于2019-02-12 22:18 被阅读8次

服务器 代码,可以兼容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") #退出服务器

 

 


如果你跟我一样都喜欢python,想成为一名优秀的程序员,也在学习python的道路上奔跑,欢迎你加入python学习裙:python裙号:491308659 验证码:南烛 或者加扣扣1346525417
群内每天都会分享最新业内资料,分享python免费柯城,共同交流学习,让学习变(编)成(程)一种习惯!

相关文章

  • 小技巧

    python文件传输服务器 python3 -m http.server ubuntu18.04下,如何解决散热风...

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

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

  • Python(python 3)小技巧,你知道几个?

    python -m http.server在8000端口启动一个web服务器,可以用于机器之间的文件传输(类似一个...

  • 【坑】Python3 SimpleHTTPServer

    命令 使用 Python2 建立简单服务器的命令: 使用Python3 建立简单服务器的命令:

  • 02-xshell与linux服务器进行文件传输

      开发中我是使用xshell连接linux服务器,需要简单的和服务器进行文件传输,这里选择使用rz(上传)、sz...

  • scp 命令

    1、将本地文件传输到服务器 2、将本地目录传输到服务器 3、将服务器上的文件传输到本地 4、将服务器上的目录传输到本地

  • python paramiko模块实现跨平台SSH

    介绍 需求:在管理用户端(实际上所有支持Python的OS都可以)批量对远程服务器进行部署、命令执行、文件传输、搭...

  • Linux 上传与下载

    sftp/scp sftp scp 如果已经知道服务器上的文件名了, 那么最简单的文件传输则是透过 scp 这个指...

  • FTP搭建

    什么是FTP ftp是文件传输协议,用于在网络上传输文件的协议,可以简单理解为ftp是一个服务器,我们可以把文件上...

  • SCP 传输文件

    可以简单用scp 命令来实现 查看scp帮助: OPTIONS: 1、从本地将文件传输到服务器 2、从本地将文件夹...

网友评论

    本文标题:一个简单的python文件传输服务器

    本文链接:https://www.haomeiwen.com/subject/ireleqtx.html