• 我的Python成长之路---第八天---Python基础(23)---2016年3月5日(晴)


    socketserver

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #!/usr/bin/env python3
    # coding:utf-8
    '''
    Created on: 2016年3月5日
     
    @author: 张晓宇
     
    Email: 61411916@qq.com
     
    Version: 1.0
     
    Description: socketserver演示程序
     
    Help:
    '''
    import socketserver
    class Myserver(socketserver.BaseRequestHandler):
        '''
        定义一个类,这个类要继承自socketserver.BaseRequestHandler
        '''
        def handle(self):
            '''
            重写handle方法,这个非常关键,当server收到客户端的请求,就会为更改客户端单独
            启动一个线程并调用该方法处理客户端的请求
            '''
            print('New Conn: ',self.client_address)
            while True:
                '''
                循环接收客户端发送过来的数据,这里可以一
                些判断比如接收到的内容为空或发生异常及其
                他推出逻辑来退出循环
                '''
                data = self.request.recv(1024)
                print('Client say: %s' %data.decode())
                self.request.send(data)
     
     
    if __name__ == '__main__':
        IP_PORT = ('127.0.0.1', 9999) # 定义监听的IP地址和端口
        server = socketserver.ThreadingTCPServer(IP_PORT, Myserver) # 创建soeketserver对象,ThreadingTCPServer方法接收两个参数,一个是监听的ip地址和端口,另一个是刚才我们创建的类
        server.serve_forever() # 启动服务

    看,是不是很简洁,其实socketserver就是用了多线程和类的技术对原生socket模块做了封装,我们使用起来就是这么简单

  • 相关阅读:
    机器学习篇:sklearn.datasets
    Java篇:Java网络编程(二)网络地址及端口
    机器学习篇:sklearn.model_selection
    实践 12:多线程读写文件
    机器学习篇:循环神经网络RNN
    Java篇:Java网络编程(三)URL
    Java篇:Java网络编程(一)网络分层
    Java篇:Java的安全模型
    DataTable无法使用AsEnumerable ()的解决办法
    问一个关于WPF调用axWindowsMediaPlayer播放不稳定的问题,大侠们给个建议!谢了
  • 原文地址:https://www.cnblogs.com/zhangxiaxuan/p/5498977.html
Copyright © 2020-2023  润新知