zoukankan      html  css  js  c++  java
  • 2017.07.16 Python网络编程之在套接字服务器中使用ThreadingMixIn

    直接上代码,之后再解释:

    # -*- coding: UTF-8 -*-
    # 或许基于某些原因你不想编写基于进程的应用程序,而更愿意编写多线程应用程序
    # 和之前的基于ForkingMixIn的套接字服务器一样,使用ThreadingMixIn编写的套接字服务器要遵循相同的回显服务器编程模式
    # ThreadedServr继承自TCPServer和ThreadingMixIn,客户端连接这个多线程版服务器时,会创建一个新线程
    # !usr/bin/env python
    # Python Network Programming Cookbook --Chapter -1
    # This program is optimized for Python 2.7
    # It may run on any other version with/without modifications

    import os
    import socket
    import threading
    import SocketServer

    SERVER_HOST='localhost'
    SERVER_PORT=0
    BUF_SIZE=1024

    def client(ip,port,message):
    """一个客户端线程服务器测试程序"""
    sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    sock.connect((ip,port))
    try:
    sock.sendall(message)
    response=sock.recv(BUF_SIZE)
    print "客户端收到:%s" %response
    finally:
    sock.close()


    class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
    """一个线程TCP请求处理的例子"""
    def handle(self):
    data=self.request.recv(1024)
    current_thread=threading.current_thread()
    response="%s :%s" %(current_thread.name,data)
    self.request.sendall(response)

    class ThreadedTCPServer(SocketServer.ThreadingMixIn,SocketServer.TCPServer):
    """这里没什么补充的,从父类中继承所有必须的"""
    pass

    if __name__=='__main__':
    server=ThreadedTCPServer((SERVER_HOST,SERVER_PORT),ThreadedTCPRequestHandler)
    ip,port=server.server_address

    server_thread=threading.Thread(target=server.serve_forever)
    server_thread.daemon=True
    server_thread.start()
    print "服务器loop running 在线程上:%s" %server_thread.name

    client(ip,port,"你好哈来自客户端1")
    client(ip,port,"你好帅来自客户端2")
    client(ip,port,"你好帅来自客户端3")

    server.shutdown()

    三部分组成:
    1.客户端部分

    2.请求处理部分:

    3.主程序部分:

    想要了解很多SocketServer的知识,可以查阅这个博文:http://blog.csdn.net/candcplusplus/article/details/51794411

    运行结果如下:



  • 相关阅读:
    Remove Duplicates from Sorted List
    Reverse Linked List II
    Remove Duplicates from Sorted List II
    Partition List
    iterator指针指向的元素
    Debug Assertion Failed! (VS)
    创建触发器,动作发送邮件到邮箱
    创建独立的监控模板
    zabbix添加被监控主机,内置的监控项,查看监控数据
    Oracle的sql脚本--->>Mysql的sql脚本
  • 原文地址:https://www.cnblogs.com/hqutcy/p/7189800.html
Copyright © 2011-2022 走看看