内容回顾:

socket 模块

  服务端:收发数据 - > accept/recv

  客户端:收发数据 -> connect/recv

  1. 1. 考试题
  2. 1. 解释性和编译型
  3. 编译型:
  4. 先把代码编译成机器码 -> 计算机寄存器去运行 C语言
  5. 先把代码编译成XXX -> 计算机找虚拟机执行代码->机器码交给计算技巧去运行 C语言、javaC#
  6. 解释型:
  7. 边解释边执行
  8.  
  9. def func():
  10. print(name)
  11.  
  12. print(666)
  13. 4.
  14. 列表: ''.join(['xx','ff'])
  15. 字符串:list('xxxxxxxx') / split
  16.  
  17. 5. v[::-1]
  18.  
  19. 7. py2/py3
  20. - 编码&字符串
  21. 字符串:
  22. py2:
  23. unicode v = u"root" 本质上用unicode存储(万国码)
  24. (str/bytes) v = "root" 本质用字节存储
  25. py3:
  26. str v = "root" 本质上用unicode存储(万国码)
  27. bytes v = b"root" 本质上用字节存储
  28. 编码:
  29. py2:
  30. - ascii
  31. 文件头可以修改:#-*- encoding:utf-8 -*-
  32. py3:
  33. - utf-8
  34. 文件头可以修改:#-*- encoding:utf-8 -*-
  35.  
  36. 注意:文件是如何存储?
  37. - 继承
  38. py2: 经典类/新式类
  39. py3: 新式类
  40. - 范围
  41. py2range/xrange
  42. py3: range
  43. - 输入
  44. py2: v1 = raw_input('请输入用户名:')
  45. py3: v2 = input('请输入用户名:')
  46. - 打印
  47. py2: print 'xx'
  48. py3: print(123)
  49.  
  50. 9. 以后写元组:
  51. v = (1,2,3,)
  52.  
  53. Django框架静态文件配置
  54.  
  55. 2. 网络编程
  56.  
  57. 1. 我的电脑有网卡,网卡里有mac地址
  58.  
  59. 2. 我到某个地方插上网线,路由器或交换机中的DHCP服务为我自动分配IP地址。
  60. IP 192.168.13.84
  61. IPv4
  62. 00000000.00000000.00000000.00000000
  63. 0~255 0~255 0~255 0~255
  64. IPv6
  65. 00000000.00000000.00000000.00000000.00000000.00000000
  66. 子网掩码:255.255.255.0
  67. 192.168.13.84
  68. 255.255.255.0
  69.  
  70. 192.168.12.84
  71. 255.255.255.0
  72.  
  73. 网关IP192.168.13.1
  74.  
  75. 局域网内、城域网、广域网:
  76. 广播
  77. 单播
  78. 广播风暴
  79. arp协议
  80.  
  81. 3. DNS
  82.  
  83. 网络连接:
  84. - 域名解析
  85. www.luffycity.com 47.95.64.113
  86. www.oldboyedu.com 101.200.195.98
  87. - 连接
  88. sk = socket.socket()
  89. sk.connect(('47.95.64.113',80))
  90. ...
  91. 问题来了,域名和IP的对应关系在哪里?
  92. 本地:
  93. Win本地电脑:
  94. C:\Windows\System32\drivers\etc\hosts
  95. 11.11.11.11 luffycicy.com
  96. Linux/Mac电脑:
  97. /etc/hosts
  98.  
  99. DNS服务器:全球顶级DNS服务器13
  100. www.luffycity.com 47.95.64.113
  101.  
  102. 创业:
  103. a. 租一个服务器+公网IP
  104. b. 租域名
  105. 域名+IP解析
  106.  
  107. 总结:
  108. 1. DHCP,自动位局域网内容电脑分配IP
  109. 2. 网关,路由器中连接交换机的口。
  110. 3. IP4个点分的十进制表示 192.11.111.11
  111. 4. 子网掩码,
  112. IP 192.168.13.99
  113. 掩码:255.255.255.0
  114.  
  115. 将挡住的IP位数作为网段。
  116. 未挡住的部分作为可变的值。
  117. 5. 局域网/城域网/广域网
  118. 6. arp协议
  119. 7. DNS
  120.  
  121. 3. 多线程
  122. 4. socketserver
  123.  
  124. 注意:以后如果想要提高效率可以使用多线程。
  125.  
  126. """
  127. pip3 install requests
  128.  
  129. """
  130. import threading
  131. import requests
  132. import uuid
  133.  
  134. url_list = [
  135. 'https://www3.autoimg.cn/newsdfs/g28/M05/F9/98/120x90_0_autohomecar__ChsEnluQmUmARAhAAAFES6mpmTM281.jpg',
  136. 'https://www2.autoimg.cn/newsdfs/g28/M09/FC/06/120x90_0_autohomecar__ChcCR1uQlD6AT4P3AAGRMJX7834274.jpg',
  137. 'https://www2.autoimg.cn/newsdfs/g3/M00/C6/A9/120x90_0_autohomecar__ChsEkVuPsdqAQz3zAAEYvWuAspI061.jpg',
  138. ]
  139.  
  140. def task(url):
  141. """"""
  142.  
  143. """
  144. 1. DNS解析,根据域名解析出IP
  145. 2. 创建socket客户端 sk = socket.socket()
  146. 3. 向服务端发起连接请求 sk.connect()
  147. 4. 发送数据(我要图片) sk.send(...)
  148. 5. 接收数据 sk.recv(8096)
  149.  
  150. 接收到数据后写入文件。
  151. """
  152. ret = requests.get(url)
  153. file_name = str(uuid.uuid4()) + '.jpg'
  154. with open(file_name, mode='wb') as f:
  155. f.write(ret.content)
  156.  
  157. for url in url_list:
  158.  
  159. t = threading.Thread(target=task,args=(url,))
  160. t.start()

考试讲解

多线程:

  就是分出多个我,取同时执行任务,提高程序的执行效率。

  1. import threading
  2. def task(a,b,c):pass
  3. def play():psaa
  4.  
  5. t1 = threading.Thread(target=task,args=(1,2,3,)) #分身一(创建一个线程,让线程取执行函数)
  6. t1.start() #执行
  7.  
  8. t2 = threading.Thread(target=play) #分身二
  9. t2.start()
    #创建的线程位子线程,直接往下走的是函数的主线程
  1. # by luffycity.com
  2. import time
  3. import threading
  4.  
  5. def task(a1,a2,a3):
  6. time.sleep(2)
  7. print('拿快递')
  8.  
  9. def play():
  10. print('和女朋友去耍')
  11.  
  12. def wm():
  13. print('去拿外卖')
  14.  
  15. # 创建一个线程
  16. # 让该线程去执行任务:函数
  17. t1 = threading.Thread(target=task,args=(1,2,3,))
  18. # 去执行吧
  19. t1.start()
  20.  
  21. # 创建一个线程
  22. # 让该线程去执行任务:函数
  23. t2 = threading.Thread(target=play)
  24. # 去执行吧
  25. t2.start()
  26.  
  27. # 创建一个线程
  28. # 让该线程去执行任务:函数
  29. t3 = threading.Thread(target=wm)
  30. # 去执行吧
  31. t3.start()
  32.  
  33. print('玩扇子')
  34. print('煽风点火')
  35. print('耍贱...')

代码详细

socket和线程的配合:

  1. import time
  2. import socket
  3. import threading
  4.  
  5. def task(conn):
  6. time.sleep(20)
  7. data = conn.recv(1024)
  8. print(data)
  9. conn.close()
  10.  
  11. server = socket.socket()
  12. server.bind(('192.168.13.84',8001,))
  13. server.listen(5)
  14.  
  15. while True:
  16. conn,addr = server.accept()
  17. t = threading.Thread(target=task,args=(conn,))
  18. t.start()
  1. import socketserver
  2.  
  3. class MyServer(socketserver.BaseRequestHandler):
  4. def handle(self):
  5. self.request
  6. self.client_address
  7. self.server
  8. # 编写代码
  9.  
  10. server = socketserver.ThreadingTCPServer(('192.168.13.84',8001,),MyServer)
  11. """
  12. server.server_address = server_address
  13. server.RequestHandlerClass = RequestHandlerClass
  14. server.__is_shut_down = threading.Event()
  15. server.__shutdown_request = False
  16. server.socket = socket....
  17. - socket.bind
  18. - socket.listen
  19. """
  20.  
  21. server.serve_forever()

解析socket源码

uuid模块

  每次执行都会生成一个随机字符串

  应用:当文件名(接受的文件随机赋值一个文件名)

  1. import uuid
  2.  
  3. v = str(uuid.uuid4())
  4. print(v)

day 30 多线程 socketserver模块补充的更多相关文章

  1. 网络编程 多线程/socketserver模块/ threading.local

    线程:进程中负责程序执行的执行单元. 多线程:在1个进程中存在多个线程. 进程只是用来把资源集中在一起,而线程才是cpu上的执行单位. 每个进程都会默认有一个控制线程也叫作主线程. 进程之间是竞争关系 ...

  2. Python网络编程(3)——SocketServer模块与简单并发服务器

    主要类型 该模块有四个比较主要的类,其中常用的是 TCPServer 和 UDPServer. 1. TCPServer 2. UDPServer 3. UnixStreamServer,类似于TCP ...

  3. 第二十九天- socketserver模块 ftp上传

    1.socketserver模块: socketserver,它提供了服务器中心类,可简化网络服务器的开发,内部使用IO多路复用以及“多线程”和“多进程”,从而实现并发处理多个客户端请求的socket ...

  4. python 网络编程之socket开发和socketserver模块

    一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频 ...

  5. [并发编程 - socketserver模块实现并发、[进程查看父子进程pid、僵尸进程、孤儿进程、守护进程、互斥锁、队列、生产者消费者模型]

    [并发编程 - socketserver模块实现并发.[进程查看父子进程pid.僵尸进程.孤儿进程.守护进程.互斥锁.队列.生产者消费者模型] socketserver模块实现并发 基于tcp的套接字 ...

  6. socket 和 SocketServer 模块

    一 .Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket socket(TCP,IP)通常也称作"套接字",用于描述IP地址和端 ...

  7. SocketServer模块

    在利用select实现伪并发的socket博文中我们说了: 如果要实现一个server端可以和多个客户端进行通信可以使用 1.多线程 2.多进程 3.select I/O多路复用 在那篇博文中我们介绍 ...

  8. 浅析python中socketserver模块使用

    虽然说用python编写简单的网络程序狠方便,但是复杂一点的网络程序还是用现成的框架比较好,这样就可以专心事物逻辑,而不是套接字的各种细节.Socketserver模块简化了编写网络服务程序,同时so ...

  9. SocketServer模块,hmac模块验证client合法性

    hmac模块: 1.模块初识: import hmac # h = hmac.new() #括号里要给它连个bytes类型,一个是自定义的secret_key,一个是你想进行加密的bytes # 密文 ...

随机推荐

  1. ansible剧本之playbook操作

    ansible 剧本 yaml介绍: 是一个编程语言 文件后缀名 yaml yml 数据对应格式: 字典: key: value 列表: [] - ansible-playbook命令格式 执行顺序: ...

  2. Flask+WebSocket实现群聊与单聊功能

    在开始我们的程序代码之前,先来了解一下相关的基础知识: 1.什么是websocket? (1)WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议.WebSocket ...

  3. Linux Cannot allocate memory问题

    查找了一下相关文档,发现这个错误的含义其实就是像它自己说的,没法分配内存了. The problem is inherent with the way Java allocates memory wh ...

  4. 学习笔记之javascript编写简单计算器

      感觉自己的的实力真的是有待提高,在编写计算器的过程中,出现了各种各样的问题,暴露了自己的基础不扎实,逻辑思维能力不够,学得知识不能运用到自己的demo中区.先介绍一些这个这个计算器的整体思路.大致 ...

  5. MIT线性代数:3.矩阵相乘

  6. Ubuntu18.04 安装在VMware 14中无法全屏问题解决

    现象:在安装完Ubuntu18.04后发现在虚拟机中不能全屏,安装Vmware Tools后还是无法解决,修改分辨率亦不成功. 原因:WAYLAND限制 解决方法:取消ubuntu中的显示设备WAYL ...

  7. Asp.Net终于可以在龙芯服务器上运行啦:Jexus成功完成对国产系列CPU的适配

    为了确保我国信息化建设“安全可靠”,使用国产关键系统.关键应用.关键软硬件替代国外信息技术产品,已经在党政部门.国营企事业单位得到了进一步落实.过去运行于 Windows 服务器的 Web 应用程序, ...

  8. 8.3 NOIP CE反思

    lsc考完以后就CE了,然后滚回去吃*去了! 这次考试都比的一批,整个先是打了暴力然后对拍发现桶有可能炸内存,然后就打了一个hash-map然后......T1 T3全使用了它,结果: 没什么可说的了 ...

  9. php imagick svg转成jpg

    php imagick svg转成jpg <pre> public function svgtojpg() { $image = '<?xml version="1.0&q ...

  10. [Office] VBA Practice

    1. 使用DateTimePicker控件 VBA中默认的User Form的Toolbox中的控件并不包含DateTimePicker,是接受时间相关数据的输入,在Toolbox上右击“Additi ...