zoukankan      html  css  js  c++  java
  • Python之路【第九篇】:Python基础(26)——socket server

    socketserver

    Python之路【第九篇】:Python基础(25)socket模块是单进程的,只能接受一个客户端的连接和请求,只有当该客户端断开的之后才能再接受来自其他客户端的连接和请求。当然我 们也可以通过python的多线程等模块自己写一个可以同时接收多个客户端连接和请求的socket。但是这完全没有必要,因为python标准库已经为 我们内置了一个多线程的socket模块socketserver,我们直接调用就可以了,完全没有必要重复造轮子。

    我们只需简单改造一下之前的socket演示程序的服务端就可以了,客户端不用变

     1 import socketserver
     2 class Myserver(socketserver.BaseRequestHandler):
     3     '''
     4     定义一个类,这个类要继承自socketserver.BaseRequestHandler
     5     '''
     6     def handle(self):
     7         '''
     8         重写handle方法,这个非常关键,当server收到客户端的请求,就会为更改客户端单独
     9         启动一个线程并调用该方法处理客户端的请求
    10         '''
    11         print('New Conn: ',self.client_address)
    12         while True:
    13             '''
    14             循环接收客户端发送过来的数据,这里可以一
    15             些判断比如接收到的内容为空或发生异常及其
    16             他推出逻辑来退出循环
    17             '''
    18             data = self.request.recv(1024)
    19             print('Client say: %s' %data.decode())
    20             self.request.send(data)
    21  
    22  
    23 if __name__ == '__main__':
    24     IP_PORT = ('127.0.0.1', 9999) # 定义监听的IP地址和端口
    25     server = socketserver.ThreadingTCPServer(IP_PORT, Myserver) # 创建soeketserver对象,ThreadingTCPServer方法接收两个参数,一个是监听的ip地址和端口,另一个是刚才我们创建的类
    26     server.serve_forever() # 启动服务

    socketserver就是用了多线程和类的技术对原生socket模块做了封装

  • 相关阅读:
    SpringMVC设置不拦截静态资源css,js
    关于Spring 国际化 No message found under code 的解决方案
    数据库中文乱码问题
    Maven下载清除jar包
    Swift学习笔记7:关闭
    bash构造tmux显示tmux ssh状态
    Mysql入门到精通数据表的操作
    MapReduce源代码分析MapTask分析
    世界目光聚焦美国:埃博拉病患者是否认真是可以治愈的?
    Android Studio如何引用jar包裹(不gradle)
  • 原文地址:https://www.cnblogs.com/jiangnanmu/p/5655086.html
Copyright © 2011-2022 走看看