zoukankan      html  css  js  c++  java
  • python2.7_2.2_在套接字服务器上使用ForkingMixIn

    Linux系统下才能用本程序。因为有Frok新的进程。。。。

    代码如下:

    # -*- coding: utf-8 -*-
    
    import os
    import socket
    import threading
    import SocketServer
    
    SERVER_HOST = 'localhost'
    SERVER_PORT = 0
    BUF_SIZE = 1024
    ECHO_MSG = 'Hello echo server!'
    
    
    class ForkingClient():
        """一个客户端用来测试forking server"""
    
        def __init__(self, ip, port):
            self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.sock.connect((ip, port))
    
        def run(self):
            """客户端playing with服务器"""
            # 发送数据到服务端
            current_process_id = os.getpid()
            print 'PID %s Sending echo message to the server:"%s"' % (current_process_id, ECHO_MSG)
            sent_data_length = self.sock.send(ECHO_MSG)
            print 'Sent:%d characters, so far ...' % sent_data_length
    
            # 显示服务端回应
            response = self.sock.recv(BUF_SIZE)
            print 'PID %s received:%s' % (current_process_id, response[5:])
    
        def shutdown(self):
            """清空客户端套接字"""
            self.sock.close()
    
    
    class ForkingServerRequestHandler(SocketServer.BaseRequestHandler):
        def handle(self):
            # 发送回显回客户端
            data = self.request.recv(BUF_SIZE)
            current_process_id = os.getegid()
            response = '%s:%s' % (current_process_id, data)
            print 'Server sending response [current_process_id:data] = [%s]' %response
            self.request.send(response)
            return
    
    
    class ForkingServer(SocketServer.ForkingMixIn,
                        SocketServer.TCPServer,
                        ):
        pass
    
    
    def main():
        server = ForkingServer((SERVER_HOST, SERVER_PORT), ForkingServerRequestHandler)
        ip, port = server.server_address
        server_thread = threading.Thread(target=server.serve_forever)
        server_thread.setDaemon(True)
        server_thread.start()
        print 'Server loop running PID:%s' % os.getpid()
    
        client1 = ForkingClient(ip, port)
        client1.run()
    
        client2 = ForkingClient(ip, port)
        client2.run()
    
        server.shutdown()
    
        client1.shutdown()
        client2.shutdown()
        server.socket.close()
    
    if __name__ == '__main__':
        main()
  • 相关阅读:
    VS2017代码对齐快捷键
    C#中的List的使用方法
    哈希表的基本使用
    javascript教程
    未能加载文件或程序集 Microsoft.Office.Interop.Excel, Version=14.0.0.0
    EXCEL 找不到编译动态表达式所需的一个或多个类型。是否缺少引用?解决办法
    C#跨线程操作控件
    Log4NET将日志写入数据库中
    winform ListView和DataGridView实现分页
    ListView在WinForm中多用于表的构建
  • 原文地址:https://www.cnblogs.com/jsben/p/5167759.html
Copyright © 2011-2022 走看看