python使用xinetd处理多客户端

xinted(eXtended InterNET daemon)即网络守护进程。xinetd能够同时监听多个指定的端口,在接受用户请求时,它能够根据用户请求的端口的不同,启动不同的网络服务进程来处理这些用户请求。

详细了解xinted,可以参考http://www.cnblogs.com/itech/archive/2010/12/27/1914846.html

例子1,使用xinetd调用httpserver.py:

httpserver.py

#!/usr/bin/python
import sys

request = ‘‘
while True:
    data= sys.stdin.readline().strip()
    request = request + data + ‘<br>‘
    if data == ‘‘:
        print ‘HTTP/1.0 200 OK‘
        print ‘‘
        print ‘<html><body><p>‘ + request + ‘</p></body></html>‘
        sys.stdout.flush()
        break

1.chmod u+x httpserver.py

2.在/etc/xinetd.d下创建httpserver(任意名字),进行设置:

vim /etc/xinetd.d/httpserver

service pythontestserver
{
        disable = no
        flags           = REUSE
        type            = UNLISTED
        port            = 9991
        protocol        = tcp
        socket_type     = stream
        wait            = no
        user            = root
        server          = /soft/11.27/httpserver.py
        server_args     = /soft/11.27/httpserver.py
        log_on_failure  += USERID

3.重启xinet.d是配置生效

/etc/init.d/xinetd restart

4.这时查看9991端口(即上面设置的port = 9991)是否打开

[[email protected] 11.27]# netstat -atnl|grep 9991
tcp        0      0 0.0.0.0:9991                0.0.0.0:*

5.打开http://192.168.220.2:9991/,能看到数据

例子2,使用xinetd调用errorserver.py:

errorserver.py(注意:由于xinet.d设置了侦听51423端口,因此errorserver.py的s.bind((host,port))要注释掉,否则会报"address already in use"的错误)

#!/usr/bin/python

import socket,traceback,time,struct,sys

host = ‘192.168.220.2‘
port = 51423
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
#s.bind((host,port))
s.listen(1)

while True:
    try:
        message,address = s.accept()
    except (KeyboardInterrupt, SystemExit):
        raise
    except:
        traceback.print_exc()
        continue
    try:
        #host = socket.gethostbyaddr(message)
        print ‘Got name %s from %s‘ % (host,message.getpeername())
        #raise KeyboardInterrupt
        #print ‘Got connection from‘, message.getpeername()
    except:
        print ‘cannot get name!‘
    try:
        message.close()
    except KeyboardInterrupt:
        print ‘Ctrl + C,exit!‘
        sys.exit(1)
    except:
        traceback.print_exc()
  1. chmod u+x errorserver.py

2.在/etc/xinetd.d下创建pythontestserver(任意名字),进行设置:

vim /etc/xinetd.d/pythontestserver

service pythontestserver
{
        disable = no
        flags           = REUSE
        type            = UNLISTED
        port            = 51423
        protocol        = tcp
        socket_type     = stream
        wait            = no
        user            = root
        server          = /soft/11.25/errorserver.py
        server_args     = /soft/11.25/errorserver.py
        log_on_failure  += USERID

3.重启xinet.d是配置生效

/etc/init.d/xinetd restart

4.这时查看51423端口(即上面设置的port = 51423)是否打开

[[email protected] 11.25]# netstat -atnl|grep 51423
tcp        0      0 0.0.0.0:51423               0.0.0.0:*                   LISTEN      
tcp        9      0 127.0.0.1:51423             127.0.0.1:53440             CLOSE_WAIT  
tcp        0      0 127.0.0.1:51423             127.0.0.1:53442             ESTABLISHED

5.xinet.d配置好了,使用telnet连接51423端口。下面是运行结果

[[email protected] ~]# telnet localhost 51423
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]‘.
时间: 2024-10-12 22:37:06

python使用xinetd处理多客户端的相关文章

[Python]通过websocket与js客户端通信

网站大多使用HTTP协议通信,而HTTP是无连接的协议.只有客户端请求时,服务器端才能发出相应的应答,HTTP请求的包也比较大,如果只是很小的数据通信,开销过大.于是,我们可以使用websocket这个协议,用最小的开销实现面向连接的通信. 具体的websocket介绍可见http://zh.wikipedia.org/wiki/WebSocket 这里,介绍如何使用Python与前端js进行通信. websocket使用HTTP协议完成握手之后,不通过HTTP直接进行websocket通信.

Python 绝技 —— UDP 服务器与客户端

i春秋作家:wasrehpic 0x00 前言 在上一篇文章「Python 绝技 -- TCP 服务器与客户端」中,介绍了传输层的核心协议 TCP ,并运用 Python 脚本的 socket 模块演示了 TCP 服务器与客户端的通信过程. 本篇将按照同样的套路,先介绍传输层的另一个核心协议 UDP,再比较 TCP 与 UDP 的特点,最后借助 Python 脚本演示 UDP 服务器与客户端的通信过程. 0x01 UDP 协议 UDP(User Datagram Protocol,用户数据报协议

Thrift操作(Python服务端和Nodejs客户端)

目录 前言 python服务端 nodejs客户端 win10运行thrift 测试 前言 操作系统win10 时间2019年02月 Thrift版本:Thrift version 0.11.0 Python版本: Python 3.5.2 Nodejs版本: node v8.9.3 参考网址1 python服务端 安装thrift python install thrift server.py # -*- coding: utf-8 -*- import json # 调用python安装的t

python编写socket服务器和客户端

本次使用的主要模块是socket模块,在这个模块中可以找到socket()函数,该函数用于创建套接字对象.套接字也有自己的方法集,这些方法可以实现基于套接字的网络通信. socket()模块函数 要创建套接字,必须使用socket.socket()函数,语法如下: socket(socket_family,socket_type,protocol=0) 其中socket_family是AF_UNIX(基于文件)或AF_INET(面向网络),socket_type是SOCK_STREAM(TCP)

python之自定义异步IO客户端

#!/usr/bin/env python # -*- coding: utf8 -*- # __Author: "Skiler Hao" # date: 2017/5/16 15:04 import select import socket import pprint """ 自定义了异步IO模块 利用非阻塞的socket,不等待连接是否成功,不等待请求的相应 select模块,去监听创建的套接字,是否有准备写,准备读的 ""&quo

python:使用ftplib编写FTP客户端

Python中的ftplib模块 Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件 FTP的工作流程及基本操作可参考协议RFC959 ftp登陆连接 from ftplib import FTP #加载ftp模块 ftp=FTP() #设置变量 ftp.set_debuglevel(2) #打开调试级别2,显示详细信息 ftp.connect("IP","port") #连接的ftp sever和

python thrift 服务端与客户端使用

一.简介 thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的.高效的服务. 二.安装 1.下载地址 http://www.apache.org/dyn/closer.cgi?path=/thrift

以太坊Go、Java、Python、Ruby、JS客户端介绍

作者:HPB_汪晓明(HPB Team) Go Ethereum 简介 go-ethereum客户端通常被称为geth,它是个命令行界面,执行在Go上实现的完整以太坊节点.通过安装和运行geth,可以参与到以太坊前台实时网络并进行以下操作: 挖掘真的以太币 在不同地址间转移资金 创建合约,发送交易 探索区块历史 及很多其他 Go Ethereum 链接: 网站: http://ethereum.github.io/go-ethereum/ Github: https://github.com/e

《Python》网络编程之客户端/服务端框架、套接字(socket)初使用

一.软件开发的机构 我们了解的涉及到两个程序之间通讯的应用大致可以分为两种: 第一种是应用类:QQ.微信.网盘等这一类是属于需要安装的桌面应用 第二种是web类:比如百度.知乎.博客园等使用浏览器访问就可以直接使用的应用 这些应用的本质其实都是两个程序之间的通讯,而这两个分类又对应了两个软件开发的架构 1.C/S架构 C/S即:Client与Server,中卫意思:客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的. 这里的客户端一般泛指客户端应用程序EXE,程序需要先安装