初試python的socket程式設計--ftp
server端:
#_*_coding:utf-8_*_
import SocketServer
import os
import commands
class MyTCPHandler(SocketServer.BaseRequestHandler):
def handle(self):
while True:
instruction = self.request.recv(1024).strip() #接收客戶端命令
if not instruction:break
instruction = instruction.split('|')
if hasattr(self,instruction[0]):
func = getattr(self,instruction[0])
func(instruction)
def FileTransfer(self,msg):
print '----filetransfer---',msg
if msg[1] == 'get':
print "clients wants to download file:",msg[2]
if os.path.isfile(msg[2]):
file_size = os.path.getsize(msg[2])
res = "ready|%s" % file_size
else:
res = "file doesn't exist"
print 'res=====',res
self.send_confirmation = "FileTransfer|get|%s" %res
self.request.send(self.send_confirmation)
feedback = self.request.recv(100)
if feedback == 'FileTransfer|get|recv_ready':
f = file(msg[2],'rb')
send_size = 0
while not file_size == send_size:
if file_size - send_size > 1024:
data = f.read(1024)
send_size += 1024
else:
data = f.read(file_size - send_size)
send_size += (file_size - send_size)
self.request.send(data)
print file_size,send_size
elif msg[1] == 'put':
pass
def ls(self,msg):
print msg
cmd_result = commands.getstatusoutput(msg[0])
self.request.sendall(cmd_result[1])
if __name__ == '__main__':
HOST,PORT = "",9002
server = SocketServer.ThreadingTCPServer((HOST,PORT),MyTCPHandler)
server.serve_forever()
client端:
#_*_coding:utf-8_*_
import socket
import os
class FtpClient(object):
def __init__(self,host,port):
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.connect((host,port))
def start(self):
self.interactive()
def interactive(self):
while True:
user_input = raw_input(">>:").strip()
if len(user_input) == 0:continue
user_input = user_input.split()
if hasattr(self,user_input[0]):
func = getattr(self,user_input[0])
func(user_input)
else:
print "wrong command usage"
def get(self,msg):
print '--get func---',msg
if len(msg) == 2:
file_name = msg[1]
instruction = "FileTransfer|get|%s" % file_name
print 'instruction====',instruction
self.sock.send(instruction)
feedback = self.sock.recv(100)
print '--->',feedback
if feedback.startswith("FileTransfer|get|ready"):
file_size = int(feedback.split("|")[-1])
self.sock.send("FileTransfer|get|recv_ready") #告訴伺服器端已經準備好了接收
recv_size = 0
f = file('client_recv/%s' % os.path.basename(file_name),'wb')
print '---->',file_name
while not file_size == recv_size:
if file_size - recv_size > 1024:
data = self.sock.recv(1024)
recv_size += len(data)
else:
data = self.sock.recv(file_size - recv_size)
recv_size += (file_size - recv_size)
f.write(data)
print file_size,recv_size
else:
print '---recv file:%s---' % file_name
f.close()
else:
print feedback
else:
print "wrong command usage!"
def ls(self,msg):
if len(msg) == 1:
self.sock.send(msg[0])
result = self.sock.recv(1024)
print result
if __name__ == '__main__':
f = FtpClient('localhost',9002)
f.start()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10972173/viewspace-2200015/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python socket程式設計Python程式設計
- Python 中的 Socket 程式設計(指南)Python程式設計
- python:socket網路程式設計Python程式設計
- 【python socket程式設計】—— 1.初探Python程式設計
- 【python socket程式設計】—— 3.響應Python程式設計
- SOCKET程式設計程式設計
- python資源庫——socket網路程式設計Python程式設計
- python網路-Socket之TCP程式設計(26)PythonTCP程式設計
- Java Socket程式設計Java程式設計
- socket程式設計(1)程式設計
- Socket程式設計模型程式設計模型
- golang中的socket程式設計Golang程式設計
- Python GUI介面程式設計-初識PythonGUI程式設計
- Socket程式設計基礎程式設計
- socket網路程式設計程式設計
- 網路程式設計-socket程式設計
- socket程式設計實戰程式設計
- 網路程式設計之socket程式設計
- 【socket程式設計基礎模板】程式設計
- select函式socket程式設計函式程式設計
- python非同步程式設計之asyncio初識Python非同步程式設計
- Linux Socket C語言網路程式設計:TCP SocketLinuxC語言程式設計TCP
- Linux Socket C語言網路程式設計:UDP SocketLinuxC語言程式設計UDP
- Linux Socket C語言網路程式設計:Select SocketLinuxC語言程式設計
- 給Python初學者的一些程式設計技巧Python程式設計
- socket程式設計在TCP中的應用程式設計TCP
- socket程式設計中常見的概念問題!程式設計
- PHP回顧之socket程式設計PHP程式設計
- 學習記錄|Socket程式設計程式設計
- 網路程式設計-Socket通訊程式設計
- 【網路程式設計】socket詳解程式設計
- 一文看懂socket程式設計程式設計
- Python使用socket的UDP協議實現FTP檔案服務PythonUDP協議FTP
- 好程式設計師Python培訓分享Python程式設計師面試技巧程式設計師Python面試
- 016 Rust 網路程式設計,FTP 示例Rust程式設計FTP
- Python網路程式設計(socket模組、緩衝區、http協議)Python程式設計HTTP協議
- Python中兩種網路程式設計方式:Socket和HTTP協議Python程式設計HTTP協議
- 玩轉 PHP 網路程式設計全套之 socket stream 程式設計PHP程式設計