码迷,mamicode.com
首页 > 其他好文 > 详细

day47——使用 Socket 实现 FTP Server

时间:2018-01-04 00:30:55      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:os.path   .so   print   exist   split()   env   cat   tin   usr   

使用 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()

 

day47——使用 Socket 实现 FTP Server

标签:os.path   .so   print   exist   split()   env   cat   tin   usr   

原文地址:https://www.cnblogs.com/yangjinbiao/p/8185942.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!