from socket import *

importsysimporttime#实现各种功能请求

classTftpClient(object):def __init__(self,sockfd):

self.sockfd=sockfddefdo_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 infiles:print(file)print("文件展示完毕")else:#请求失败原因

print(data)#下载指定文件

defdo_get(self,filename):

self.sockfd.send(('G' +filename).encode())

data= self.sockfd.recv(1024).decode()#请求成功

if data == 'OK':

fd= open(filename,'wb')whileTrue:

data= self.sockfd.recv(1024)#结束符

if data == b'##':breakfd.write(data)

fd.close()print("%s 下载完成\n"%filename)else:#请求失败原因

print(data)defdo_put(self,filename):#判断本地是否有要上传的文件

try:

fd= open(filename,'rb')except:print("上传文件不存在")returnself.sockfd.send(("P"+filename).encode())

data= self.sockfd.recv(1024).decode()#请求成功

if data == 'OK':whileTrue:

data= fd.read(1024)if notdata:breakself.sockfd.send(data)

fd.close()#发送结束符并防止粘包

time.sleep(0.1)

self.sockfd.send(b'##')print("%s 上传完毕"%filename)else:#请求失败原因

print(data)#创建套接字并建立连接

defmain():#终端输入地址

if len(sys.argv) < 3:print("argv is error")returnHOST= sys.argv[1]

PORT= int(sys.argv[2])

ADDR=(HOST,PORT)

sockfd=socket()

sockfd.connect(ADDR)#创建对象

tftp =TftpClient(sockfd)whileTrue: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":

sockfd.send(b'Q')

sockfd.close()

sys.exit("欢迎使用")else:print("请输入正确命令!")if __name__ == "__main__":

main()

多线程并发

threading模块完成多线程并发

对比多进程并发

优势 :

资源消耗少

缺点 :

需要注意对共享资源的操作

实现步骤:1. 创建套接字,绑定,监听2. 接收客户端连接请求,创建新的线程3. 主线程继续等待其他客户端连接,分支线程执行客户端具体请求4. 处理完客户端请求后分支线程自然退出,关闭客户端套接字

示例:from socket import *

importos,sysfrom threading import *HOST= "0.0.0.0"PORT= 8888ADDR=(HOST,PORT)#客户端处理函数

defhandler(connfd):print("Connect from",connfd.getpeername())whileTrue:

data= connfd.recv(1024).decode()if notdata:break

print(data)

connfd.send(b'Receive your msg')

connfd.close()defmain(ADDR):

s=socket()

s.bind(ADDR)

s.listen(5)whileTrue:try:

connfd,addr=s.accept()#处理 Ctrl + C

exceptKeyboardInterrupt:

s.close()

sys.exit("服务器退出")#其他异常

exceptException as e:print(e)continue

#创建子线程用于处理客户端请求

t = Thread(target=handler,args=(connfd,))

t.setDaemon(True)

t.start()if __name__ == __main__:

main()

python网络编程第三版网盘_Python网络编程(socketserver、TFTP云盘、HTTPServer服务器模型)...相关推荐

  1. python基础教程第三版电子版百度云-《python基础教程第三版》高清版PDF免费下载...

    下载地址1:http://t.cn/EGxO1sW Python基础教程 第3版Python简明教程书籍 Python编程从入门到实践 灵程序设计丛书 <python基础教程第三版>高清版 ...

  2. python基础教程第三版电子版-《python基础教程第三版》PDF高清完整版-免费下载...

    <python基础教程第3版>高清PDF下载地址:http://t.cn/EGxO1sW Python基础教程 第3版Python简明教程书籍 Python编程从入门到实践 灵程序设计丛书 ...

  3. python基础教程第三版-《Python基础教程第三版》原版中英文PDF+代码+袁国忠(译)...

    <Python基础教程第3版>整本书的结构安排还是比较明显的.先是基础知识和python的基本数据类型和语言特性介绍,然后是面向对象的编程.之后介绍python的标准库以及相关主题的编程( ...

  4. UNIX环境高级编程(第三版 源码及编译好的静态库文件)

    UNIX环境高级编程(第三版) 源码 及 库文件 链接: https://pan.baidu.com/s/1tPY17lWNDEbzkOwZaRUUNg 提取码: 1024 复制这段内容后打开百度网盘 ...

  5. UNIX环境高级编程-第三版

    Unix环境高级编程-第三版 之前学习了<Linux系统编程>对于常见的概念和函数都有了基础的认知,这里准备通过这本书,深入学习系统API相关内容.笔记内容会有所倾向,不会严格反应书本内容 ...

  6. JavaScript面向对象编程-第三版不完全系统解读

    JavaScript面向对象编程-第三版不完全系统解读 作者:老九-技术大黍 产品:查看原文 社交:知乎 公众号:老九学堂(新手有福利) 特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系笔者 ...

  7. python程序实例教程基础-python基础教程第三版源代码

    [实例简介] python基础教程第三版源代码 python基础教程第三版源代码 [实例截图] [核心代码] Beginning_Python_version3_SourceCode └── Begi ...

  8. python基本代码教程-python基础教程第三版源代码

    [实例简介] python基础教程第三版源代码 python基础教程第三版源代码 [实例截图] [核心代码] Beginning_Python_version3_SourceCode └── Begi ...

  9. Linux - Unix环境高级编程(第三版) 代码编译

    Unix环境高级编程(第三版) 代码编译 本文地址:http://blog.csdn.net/caroline_wendy 时间:2014.10.2 1. 下载代码:http://www.apuebo ...

  10. 【好书分享】《Python Cookbook》第三版 中文版(带书签)

    [书籍介绍] 带完整书签 书籍中的文字可复制 [获取方式] <Python Cookbook>第三版 中文版.rar: https://url00.ctfile.com/f/1936360 ...

最新文章

  1. 设计模式之外观模式(Facade)摘录
  2. 腾讯会议又一黑科技,屏蔽超过 200 种会议噪声是如何做到的?
  3. 【转】 Android新特性介绍,ConstraintLayout完全解析
  4. 在IIS 5.1 或IIS6 中配置PHP 的FastCGI模式
  5. PotPlayer安装与配置
  6. 5分钟了解VMware vSAN的分布式RAID
  7. 总是记不住java的IO流用法?用N个问题教你掌握java IO流
  8. 顺序循环队列类c#语言,C#--循环队列的顺序存储
  9. 关于Bean Validation
  10. javascript offsetLeft,Left,clientLeft 各种浏览器位置相关属性
  11. Qt Designer位置
  12. python识别二维码
  13. java中explain什么意思_explain关键字使用解释
  14. 怎么逼自己 成为一个上进的人
  15. 微专业数据分析师 数据资料_微数据:元数据的内容
  16. Android面试常见问题汇总
  17. 015:Scrapy获取淘车网十七万二手车数据
  18. 本科、硕士和博士有何区别?
  19. 如何理解「外汇储备导致人民币货币增加」?
  20. 使用vnc启动服务器candence相关问题

热门文章

  1. 面向对象-类与对象、关键字、异常使用
  2. Maven图文闪电入门
  3. 扩展Email系统,成就分布式协同
  4. 微型计算机的三类接口,2020年武汉理工期末微机接口复习.doc
  5. 多元有序logistic回归_stata速学|logistic回归分析
  6. openpythonxl_常用模块之openpyxl (python3入门)
  7. CentOS环境下jdk的安装与配置
  8. PHP中cURL的curl_getinfo函数返回的CURLINFO_HTTP_CODE是0
  9. MAC的编译更严格一些
  10. VC如何打开代码对应的界面编辑窗口