tcp客户端

from socket import *
import sys 
import time 

#功能封装为类
class TftpClient(object):
    def __init__(self,s):
        self.sockfd = s

    def do_list(self):
        self.sockfd.send(b"L")  #发送请求类型
        #等待服务器确认
        data = self.sockfd.recv(1024).decode()

        if data == 'OK':
            data = self.sockfd.recv(4096).decode()
            files = data.split('#')
            for file in files:
                print(file)
            print("%%%%%%文件展示完毕%%%%%%\n")
        else:
            #失败原因
            print(data)

    def do_get(self,filename):
        self.sockfd.send(('G ' + filename).encode())
        data = self.sockfd.recv(1024).decode()
        if data == 'OK':
            fd = open(filename,'wb')
            while True:
                data = self.sockfd.recv(1024)                
                if data == b"##":
                    break                   
                fd.write(data)
            fd.close()
            print("%s 下载完成\n"%filename)
        else:
            print(data)


    def do_put(self,filename):
        try:
            fd = open(filename,'rb')
        except:
            print("上传文件不存在")
            return

        self.sockfd.send(("P " + filename).encode())
        data = self.sockfd.recv(1024).decode()
        if data == 'OK':
            while True:
                data = fd.read(1024)
                if not data:
                    time.sleep(0.1)
                    self.sockfd.send(b'##')
                    break
                self.sockfd.send(data)
            print("%s 文件上传完毕"%filename)
        else:
            print(data)


    def do_quit(self):
        self.sockfd.send(b'Q') 

#套接字连接
def main():
    if len(sys.argv) < 3:
        print("argv is error")
        return 
    HOST = sys.argv[1]
    PORT = int(sys.argv[2])
    ADDR = (HOST,PORT)

    s = socket()
    s.connect(ADDR)
    tftp = TftpClient(s)

    while True:
        print("")
        print("========命令选项=======")
        print("******** list *******")
        print("****** get file *****")
        print("****** put file *****")
        print("******** quit *******")
        print("======================")

        cmd = input("请输入命令>>")

        if cmd.strip() == 'list':
            tftp.do_list()
        elif cmd[:3] == "get":
            filename = cmd.split(' ')[-1]
            tftp.do_get(filename)
        elif cmd[:3] == "put":
            filename = cmd.split(' ')[-1]
            tftp.do_put(filename) 
        elif cmd.strip() == "quit":
            tftp.do_quit()
            sys.exit("欢迎使用")
        else:
            print("请输入正确的命令!!!")
            continue

if __name__ == "__main__":
    main()
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值