• day47——使用 Socket 实现 FTP Server


    使用 Socket 实现 FTP Server ,实现如下功能:

    get  /tmp/1.txt  /tmp/1.txt :把服务端 /tmp/1.txt 下载到客户端 /tmp/1.txt
    put  /tmp/1.txt  /tmp/1.txt :把客户端 /tmp/1.txt 上传到服务端 /tmp/1.txt

     1 [root@localhost ~]# cat ftp_server.py 
     2 #!/usr/bin/env python
     3 #-*- coding: utf8 -*-
     4 
     5 import socket
     6 from subprocess import Popen, PIPE
     7 
     8 HOST = ''
     9 PORT = 1234
    10 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    11 s.bind((HOST, PORT))
    12 s.listen(1)
    13 conn, addr = s.accept()
    14 print 'conn', conn
    15 print 'Connected by', addr
    16 while 1:
    17     cmd = conn.recv(1024)
    18     cmd_list = cmd.split()
    19     if cmd_list[0] == 'get':
    20         with open(cmd_list[1]) as fd:
    21             while True:
    22                 data = fd.read(1024)
    23                 conn.sendall(data)
    24                 if not data:
    25                     conn.sendall('EOF')
    26                     break
    27     if not cmd: break
    28 conn.close()
     1 [root@localhost ~]# cat ftp_client.py 
     2 #!/usr/bin/env python
     3 #-*- coding:utf-8 -*-
     4 
     5 import os
     6 import sys
     7 import tab
     8 import socket
     9 
    10 HOST = '192.168.5.131'
    11 PORT = 1234
    12 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    13 s.connect((HOST, PORT))
    14 while True:
    15     cmd = raw_input("Please input cmd: ").strip()
    16     if cmd.lower()== 'exit' or cmd.lower() == 'quit':
    17         break
    18     cmd_list = cmd.split()
    19     if len(cmd_list) != 3:
    20         print "Ex: get file1 file2"
    21         continue
    22     else:
    23         s.sendall(cmd)
    24         if not os.path.exists(cmd_list[2]):
    25             dst_file = cmd_list[2]
    26         else:
    27             dst_file = cmd_list[2]+'.new'
    28         n = 1
    29         while True:
    30             data_rev = s.recv(1024)
    31             if data_rev.endswith('EOF'):
    32                 data = data_rev[:-3]
    33             else:
    34                 data = data_rev
    35             if n == 1:
    36                 with open(dst_file, 'wb') as fd:
    37                     fd.write(data) 
    38             else:
    39                 with open(dst_file, 'a') as fd:
    40                     fd.write(data)
    41             n += 1
    42             if data_rev[-3:] == 'EOF':
    43                 print "Success! destination file is %s" % dst_file
    44                 break
    45 s.close()
  • 相关阅读:
    Win10
    编码
    [转帖] Tomcat安全配置小技巧
    关于redis bind
    query data filtered by a JSON Column in SQLAlchemy
    Flask多线程环境下logging
    Flask request
    [转] MySQL树结构递归查询处理
    [转]了解BFF架构
    转载:ELK实战系列3-RabbitMQ+ELK搭建日志平台
  • 原文地址:https://www.cnblogs.com/yangjinbiao/p/8185942.html
Copyright © 2020-2023  润新知