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模块做了封装

  • 相关阅读:
    禅道项目管理系统自定义菜单相关
    2015年技术方向转变计划
    LinuxMint 17.1 Cinnamon桌面窗口焦点bug
    通过指定函数/方法形参类型提高PHP代码可靠性
    Apache+Mod_Python配置
    JPHP最新进展 v0.6
    “领域驱动开发”实例之旅(1)--不一样的开发模式
    Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作
    哈希值 是什么?哈希值是什么东西啊?具体怎么识别?怎么用?
    TortoiseGit 使用教程
  • 原文地址:https://www.cnblogs.com/jiangnanmu/p/5655086.html
Copyright © 2011-2022 走看看