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()
时间: 2024-10-05 03:12:22

python2.7_2.2_在套接字服务器上使用ForkingMixIn的相关文章

2017.07.16 Python网络编程之在套接字服务器中使用ThreadingMixIn

直接上代码,之后再解释: # -*- coding: UTF-8 -*-# 或许基于某些原因你不想编写基于进程的应用程序,而更愿意编写多线程应用程序# 和之前的基于ForkingMixIn的套接字服务器一样,使用ThreadingMixIn编写的套接字服务器要遵循相同的回显服务器编程模式# ThreadedServr继承自TCPServer和ThreadingMixIn,客户端连接这个多线程版服务器时,会创建一个新线程# !usr/bin/env python# Python Network P

套接字接上链接循环

套接字接上链接循环 #加上连接循环的server端 import socket #生成一个socket对象 soc=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #绑定地址跟端口号 soc.bind(('127.0.0.1',8001)) #监听(半连接池的大小),不是连接数 soc.listen(3) #等着客户端来连接,conn相当于连接通道,addr是客户端的地址 while True: print('等待客户端连接') conn,add

Java学习笔记(3)----网络套接字服务器多线程版本

本例给出一个客户端程序和一个服务器程序.客户端向服务器发送数据.服务器接收数据,并用它来生成一个结果,然后将这个结果返回给客户端.客户端在控制台上显示结果.在本例中,客户端发送的数据是圆的半径,服务器生成的结果是圆的面积. 客户端通过输出流套接字的 DataOuputStream 发送半径,服务器通过输入流套接字的 DataInputStream 接收半径.服务器计算面积,然后,通过输出流套接字的 DataOutputStream 把它发送给客户端,客户端通过输入流套接字的 DataInputS

nodejs 实现套接字服务

nodejs实现套接字服务   一 什么是套接字 1.套接字允许一个进程他通过一个IP地址和端口与另一个进程通信,当你实现对运行在同一台服务器上的两个不同进程的进程间通信或访问一个完全不同的服务器上运行的服务时,套接字很有用.node提供的net模块,允许你既创建套接字服务器又创建可以连接到套接字服务器的客户端. 2.套接字位于HTTP层下面并提供服务器之间的点对点通信.套接字使用套接字地址来工作,这是IP地址和端口的组合.在套接字连接中,有两种类型的点:一类是服务器,它监听连接:一类是客户端,

2017.07.12 Python网络编程之使用多路复用套接字I/O

1.在本章开始之前,需要先理解同步与异步,阻塞与非阻塞的区别: "阻塞"与"非阻塞"与"同步"与"异步"不能简单的从字面理解,提供一个从分布式系统角度的回答.1.同步与异步同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回.但是一旦调用返回,就得到返回值了.换句话

进程间通信(10) - 网络套接字(socket)[2]

1.前言 本篇文章的所有例子,基于RHEL6.5平台(linux kernal: 2.6.32-431.el6.i686). 在前一篇文章中(点此链接),已经介绍了socket(),bind(),listen(),connect(),accept()这些函数. 至此,服务器与客户机已经建立好了连接.可以调用网络I/O进行读写操作了,即实现网络中不同进程之间的通信.网络I/O操作有下面的几组函数: · read() / write() · readv() / writev() · send() /

网络套接字与寻址

1 套接字描述 套接字是通信端点的抽象,创建一个套接字使用如下函数: #include <sys/socket.h> int socket(int domain, int type, int protocol); 返回值:若成功,返回套接字描述符:若出错,返回-1. 参数: domain: 指定通信的特征,包括地址格式,以AF_开头的常数表示地址族(address family): 域 描述 AF_INET IPv4因特网域 AF_INET6 IPv6因特网域 AF_UNIX UNIX域 AF

apue学习笔记(第十六章 网络IPC:套接字)

本章将考察不同计算机(通过网络连接)上的进程相互通信的机制:网络进程间通信. 套接字描述符 正如使用文件描述符访问文件,应用程序用套接字描述符访问套接字. 许多处理文件描述符函数(如read和write)可以用于处理套接字描述符.调用socket函数创建一个套接字 #include <sys/socket.h> int socket(int domain,int type,int protocol); 参数domain(域)确定通信的特性,包括地址格式.下图总结了POSIX.1指定的各个域,每

Linux 套接字编程中的 5 个隐患

在异构环境中开发可靠的网络应用程序 M. Tim Jones ([email protected]), 资深软件工程师, Emulex 简介: Socket API 是网络应用程序开发中实际应用的标准 API.尽管该 API 简单,但是开发新手可能会经历一些常见的问题.本文识别一些最常见的隐患并向您显示如何避免它们. 发布日期: 2005 年 10 月 08 日 级别: 中级 访问情况 : 13059 次浏览 评论: 0 (查看 | 添加评论 - 登录)  平均分 (34个评分)为本文评分 在