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()

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

  1. upd套接字服务器与客户端交互C++代码示范

    upd套接字服务器与客户端交互C++代码示范 // vc2_2_4UDPserver_Txwtech.cpp : 定义控制台应用程序的入口点. //服务器端 #include "StdAfx ...

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

    本例给出一个客户端程序和一个服务器程序.客户端向服务器发送数据.服务器接收数据,并用它来生成一个结果,然后将这个结果返回给客户端.客户端在控制台上显示结果.在本例中,客户端发送的数据是圆的半径,服务器 ...

  3. 基于多进程的Tcp套接字服务器

    服务端 import socketfrom multiprocessing import Process def task(c): print('顾客吃点啥') while True: data = ...

  4. nodejs 实现套接字服务

    nodejs实现套接字服务     一 什么是套接字 1.套接字允许一个进程他通过一个IP地址和端口与另一个进程通信,当你实现对运行在同一台服务器上的两个不同进程的进程间通信或访问一个完全不同的服务器 ...

  5. (转载)Linux 套接字编程中的 5 个隐患

    在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系统的标准特性.事实上,很难找到一种不支持 Sockets API 的现代语言.该 API 相当简单,但新的开 ...

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

    http://www.ibm.com/developerworks/cn/linux/l-sockpit/ 在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系 ...

  7. Linux 套接字编程中要注意的细节

    隐患 1.忽略返回状态 第一个隐患很明显,但它是开发新手最容易犯的一个错误.如果您忽略函数的返回状态,当它们失败或部分成功的时候,您也许会迷失.反过来,这可能传播错误,使定位问题的源头变得困难. 捕获 ...

  8. 进程间通信系列 之 socket套接字及其实例

    进程间通信系列 之 概述与对比   http://blog.csdn.net/younger_china/article/details/15808685  进程间通信系列 之 共享内存及其实例   ...

  9. 套接字API

    Q:套接字特点 A:管道,消息队列,信号量,共享内存这些通信机制只能允许同一计算机上运行的进程相互通信,而套接字不仅可以提供在同一计算机上的进程间通信,还可以提供不同计算机上的进程间通信. 服务器端: ...

随机推荐

  1. Delphi内存操作API函数(备查,并一一学习)

    Delphi内存操作API函数System.IsMemoryManagerSet;System.Move;System.New;System.ReallocMem;System.ReallocMemo ...

  2. zzbank oneOpencloud Env linuxaix6.1 interactiveMaintain(nfs,aix genintall基于系统iso光盘,aix6.1 puppet-Agent,Cent6.4 puppetServer,agent time no syn case Er)

    1,puppet--server,Client,Agent time no syn case eror puppet agent --server frontend -terr: Could not ...

  3. CNZZ公告:近期无法获取百度关键词

    今天登录cnzz网站统计,出现一条公告,说是“关于近期无法获取百度关键词的公告”,内容如下: 近日部分用户反馈百度搜索词流量出现不同程度的下降.经排查,是由于百度搜索引擎调整了URL规则,取消了来源U ...

  4. Servlet -- 跳转到页面后的绝对路径与相对路径的问题

    我们在使用servlet或其它框架,从后台跳转到视图层的时候.常会遇到这种情况,CSS和JS文件失效了,可是假设通过网址直接訪问JSP是没问题的. 这就是由于绝对路径和相对路径导致的. 绝对路径.就是 ...

  5. UI基础:UILabel.UIFont

    UILabel:标签 继承自UIView ,在UIView基础上扩充了显示文本的功能.(文本框) UILabel的使用步骤 1.创建控件 UILabel *aLabel=[[UILabel alloc ...

  6. POJ3771+Prim

    最小生成树的应用 数据量小. /* Prim */ #include<stdio.h> #include<string.h> #include<stdlib.h> ...

  7. js调试若干

    主要是将 chrome调试工具   firebug的控制台对以下都有支持 consoleAPI https://developers.google.com/chrome-developer-tools ...

  8. C++ 字符串分割,分割到vector中

    #include <string> #include <vector> using std::string; using std::vector; int splitStrin ...

  9. SAE上使用本地sql文件建表时出错解决方法

    在SAE上部署网站时需要上传本地的数据库结构,我也导出了本地数据库为sql文件,但是上传到SAE上时遇到了如下错误: MySQL 返回: #1044 - Access denied for user ...

  10. PHP创建定义数组

    $array = array();      $array["key"] = "values";  ?> 在PHP中声明数组的方式主要有两种:1.用arr ...