返回顶部
首页 > 资讯 > 后端开发 > Python >第二十九天- socketserver模
  • 518
分享到

第二十九天- socketserver模

socketserver 2023-01-30 22:01:54 518人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

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

 

1.Socketserver模块:

  socketserver,它提供了服务器中心类,可简化网络服务器的开发,内部使用io多路复用以及“多线程”和“多进程”,从而实现并发处理多个客户端请求的socket服务端。即,每个客服端请求连接到服务器时,socket服务端都会在服务器上创建一个“线程”或“进程”专门负责处理当前客户端的所有请求。

 

 

2.socketserver的ThreadingtcpServer类:

  ThreadingTCPServer实现的socket服务器内部会为每个client创建一个“线程”,该线程用来和客户端就行交互

  使用方法
  1、创建一个继承socketserver.BaseRequestHandler的类
  2、类中必须重写一个名为handler的方法
  3、实例化一个服务器类,传入服务器地址和请求处理程序类
  4、调用serve_forever()事件循环监听

 

 

3.socketserver代码示例:

 1 import socketserver
 2 
 3 
 4 class Myserver(socketserver.BaseRequestHandler):
 5 
 6     def handle(self):  # 必须有handle方法
 7         while 1:
 8             from_client_msg = self.request.recv(1024)  # self.request 相当于conn连接通道
 9             print(from_client_msg.decode('utf-8'))
10             server_msg = input('服务端>>>').encode('utf-8')
11             self.request.send(server_msg)
12 
13 
14 if __name__ == '__main__':
15     ip_port = ('127.0.0.1',8086)
16 
17     # server是socketserver模块的ThreadingTCPServer类的实例化对象
18     server = socketserver.ThreadingTCPServer(ip_port,Myserver) # 固定写法 ip_port和上面创建的类
19     server.serve_forever()  # server对象调用一个serve_forever方法循环监听
服务端
 1 import socket
 2 import time
 3 
 4 client = socket.socket()
 5 client.connect(('127.0.0.1',8086))
 6 
 7 while 1:
 8     msg = input('客户端>>>')
 9     # time.sleep(1)
10     client.send(msg.encode('utf-8'))
11 
12     from_server_msg = client.recv(1024).decode('utf-8')
13     print(from_server_msg)
14 
15 client.close()
客户端

 

 

4.socket的方法补充:

 1 '''
 2 服务端套接字函数
 3 s.bind()    绑定(主机,端口号)到套接字
 4 s.listen()  开始TCP监听
 5 s.accept()  被动接受TCP客户的连接,(阻塞式)等待连接的到来
 6 
 7 客户端套接字函数
 8 s.connect()     主动初始化TCP服务器连接
 9 s.connect_ex()  connect()函数的扩展版本,出错时返回出错码,而不是抛出异常
10 
11 公共用途的套接字函数
12 s.recv()            接收TCP数据
13 s.send()            发送TCP数据
14 s.sendall()         发送TCP数据
15 s.recvfrom()        接收UDP数据
16 s.sendto()          发送UDP数据
17 s.getpeername()     连接到当前套接字的远端的地址
18 s.getsockname()     当前套接字的地址
19 s.getsockopt()      返回指定套接字的参数
20 s.setsockopt()      设置指定套接字的参数
21 s.close()           关闭套接字
22 
23 面向的套接字方法
24 s.setblocking()     设置套接字的阻塞与非阻塞模式
25 s.settimeout()      设置阻塞套接字操作的超时时间
26 s.gettimeout()      得到阻塞套接字操作的超时时间
27 
28 面向文件的套接字的函数
29 s.fileno()          套接字的文件描述符
30 s.makefile()        创建一个与该套接字相关的文件
31 '''

 

 

5.ftp简易上传练习:

 1 import socket
 2 
 3 
 4 def send_file_client(new_conn,client_addr):
 5     # 接收客户端要下载的文件名
 6     file_name = new_conn.recv(1024).decode('utf-8')
 7     print("客户端%s需要下载的文件是:%s"%(str(client_addr),file_name))
 8 
 9     # 打开文件读取数据
10     file_content = None
11     try:
12         with open(file_name,"rb") as f:
13             file_content = f.read()
14 
15     except Exception as e:
16         print('没有要下载的文件%s' % file_name)
17 
18     # 发送文件数据给客户端
19     if file_content:
20         new_conn.send(file_content)
21         return
22 
23 
24 def main():
25     file_server = socket.socket()
26     ip_port = ('127.0.0.1',8086)
27     file_server.bind(ip_port)
28     file_server.listen()
29 
30     while 1:
31         new_conn,client_addr = file_server.accept()
32         # 调用发送文件函数
33         send_file_client(new_conn,client_addr)
34         new_conn.close()
35 
36     file_server.close()
37 
38 
39 if __name__ == '__main__':
40     main()
server
 1 import socket
 2 
 3 
 4 def main():
 5     file_client = socket.socket()
 6     # 获取ip port
 7     server_ip = input('请输入服务器ip:')
 8     server_port = input('请输入下载的port:')
 9     # 连接服务器
10     file_client.connect((server_ip,int(server_port)))
11 
12     # 获取文件名 发给服务器
13     down_file_name = input("请输入要下载的文件名字:")
14     file_client.send(down_file_name.encode('utf-8'))
15 
16     # 接收发来的数据写入新文件
17     content = file_client.recv(1024*1024).decode('utf-8')
18     with open('new'+down_file_name,'w') as f:
19         f.write(content)
20 
21     file_client.close()
22 
23 
24 if __name__ == '__main__':
25     main()
client

 

--结束END--

本文标题: 第二十九天- socketserver模

本文链接: https://lsjlt.com/news/180383.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 第二十九天- socketserver模
      1.socketserver模块:   socketserver,它提供了服务器中心类,可简化网络服务器的开发,内部使用IO多路复用以及“多线程”和“多进程”,从而实现并发处理多个客户端请求的socket服务端。即,每个客服端请求连接...
    99+
    2023-01-30
    socketserver
  • Java面试题冲刺第二十九天--JVM3
    目录面试题1:如何判断对象是否存活1.引用计数算法2.可达性分析算法面试题2:哪些对象可以作为GC Roots?面试题3:你了解的对象引用方式都有哪些?1 强引用2 软引用3 弱引用...
    99+
    2024-04-02
  • Swift 周报 第二十九期
    文章目录 前言新闻和社区担心泄密!外媒:苹果公司限制员工使用ChatGPT苹果公司大幅削减其MR头显销售预期,不足百万台 提案通过的提案正在审查的提案 Swift 论坛1、讨论 SwiftUI 图表、超大数据集和图表叠加...
    99+
    2023-08-17
    swift ios swiftui 开发语言 app 原力计划
  • 第二十五天- 包
      # 包:# 定义:# 包是⼀种通过'模块名'来组织python模块名称空间的⽅式.我们创建的每个⽂件夹都可# 称之为包.但要注意,在python2中规定.包内必须存在 __init__.py⽂件.在python3中可以# 省略,但是最...
    99+
    2023-01-30
  • 学习python的第二十天(json模块
    1.josn模块(用于指定数据类型文件快速读写修改) 1.指定的数据类型 dict(字典) str(字符串) int/float(整型/浮点型) bool中的False,True,None 2.dumps/loads loads 用于内...
    99+
    2023-01-31
    十天 模块 python
  • 学习python的第二十天(time模块
    1.三种时间的显示样式 1.时间戳 1.相关函数 1.time() 2.显示样式 import time print(time.time()) #1560150343.5837357 距离计算机元年1970年1月1日00:00:0的过...
    99+
    2023-01-31
    十天 模块 python
  • 学习python的第二十天(os模块,s
    1.os模块(功能类似操作系统与文件交互) 1.常用模块功能 1.创建文件 1.mkdir 2.移除文件 1.remove 删除指定文件 2.rmdir 删除单级空目录,若目录不为空则无法删除 3.removedirs 若目录为空,则删...
    99+
    2023-01-31
    十天 模块 python
  • 我的python学习--第十二天(二)
    Python异常处理  Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员,所有异常都从基类Exception继承,而且都在excepti...
    99+
    2023-01-31
    二天 python
  • 学习python的第二十天(dateti
    1.datetime模块(用于修改日期) import datetime print(datetime.datetime.now(),type(datetime.datetime.now())) 2019-06-10 19:37:55....
    99+
    2023-01-31
    十天 python dateti
  • 学习python的第十九天(包,软件开发
    1.包 1.什么是包 包是模块的一种形式,包的本质就是一个含有__init__.py的文件的文件夹 2.为什么用包 当一个模块功能太多的时候不方便进行管理,我们用包来进行管理 3.包的使用 1.导入包发生的三件事 创建一个包的名称空间...
    99+
    2023-01-31
    软件 python
  • Java面试题冲刺第二十二天-- Nginx
    目录面试题1:谈一下你对 Nginx 的理解为啥我们总说Nginx好用?追问1:正向代理和反向代理区别在哪?正向代理面试题2:常用的 Nginx 做负载均衡的策略有哪些?1.指定权重...
    99+
    2024-04-02
  • 学习python的第二十一天(loggi
    1.logging模块 用于程序的运行日志 1.初级 #首先程序运行分会出现5中情况 1.logging.info('info') #程序正常运行级别为10 2.logging.debug('debug') #程序调试...
    99+
    2023-01-31
    python loggi
  • 学习python的第二十一天(hashl
    1.hashlib模块(文件传输中将传输内容用指定算法进行处理) hash是一种算法(Python3.版本里使用hashlib模块代替了md5模块和sha模块,主要提供 SHA1、SHA224、SHA256、SHA384、SHA512、...
    99+
    2023-01-31
    python hashl
  • Java面试题冲刺第十九天--数据库(4)
    目录面试题1:说一下你对聚集索引与非聚集索引的理解,以及他们的区别?1、聚集索引2、非聚集索引追问1:为什么聚集索引可以创建在任何一列上,如果此表没有主键约束,即有可能存在重复行数据...
    99+
    2024-04-02
  • 第十九天- 约束 异常处理 日志使用
    # 类的约束: 1 # 为何要用,在哪里遇到? 2 3 # 例:贴吧登录(若不同人来写) 4 class Normal: # 张三版 5 def login(self): 6 print("普通账...
    99+
    2023-01-30
    异常 日志
  • Java面试题冲刺第二十一天--JVM
    目录面试题1:你遇到过哪些OOM情况,什么原因造成的?怎么解决的?Java heap spaceGC overhead limit exceeded Permgen spa...
    99+
    2024-04-02
  • Java面试题冲刺第二十七天--JVM2
    目录面试题1:简单说一下java的垃圾回收机制。面试题2:JVM会在什么时候进行GC呢?追问1:介绍一下不同代空间的垃圾回收机制 追问2:能说一下新生代空间的构成与执行逻辑...
    99+
    2024-04-02
  • 学习python的第十二天(编码,解码,
    1.编码解码 1.字符串编码 字符 --------》翻译过程 -------》数字 2.字符串解码 字符 --------》翻译过程 -------》数字 3.编码解码用到的翻译工具 中国:GBK 外国:日本—Shift_JIS,美国...
    99+
    2023-01-31
    二天 python
  • MySQL必知必会--第二十二章~第二十三章
    第二十三章--使用存储过程 1.存储过程:存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。 2.为什么要使用存储过程?     (1)通过把处理封装在容易使用的单元中,简化复杂的操作(正如前 面例子所述)。    ...
    99+
    2014-12-21
    MySQL必知必会--第二十二章~第二十三章
  • 【leetcode 简单】 第五十九题
    给定两个字符串 s 和 t,判断它们是否是同构的。 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。 ...
    99+
    2023-01-30
    第五十九 简单 leetcode
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作