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

运行结果如下:



原文地址:https://www.cnblogs.com/hqutcy/p/7189800.html