设为首页 加入收藏

TOP

Python使用xinetd处理多客户端
2015-02-02 14:43:12 来源: 作者: 【 】 浏览:19
Tags:Python 使用 xinetd 处理 客户端

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


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


httpserver.py


#!/usr/bin/python


import sys


?


request = ''


while True:


? ? data= sys.stdin.readline().strip()


? ? request = request + data + '
'


? ? if data == '':


? ? ? ? print 'HTTP/1.0 200 OK'


? ? ? ? print ''


? ? ? ? print '

' + request + '

'


? ? ? ? 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)是否打开


[root@cai 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/,能看到数据


Python使用xinetd处理多客户端



例子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)是否打开


[root@cai 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端口。下面是运行结果


[root@cai ~]# telnet localhost 51423


Trying 127.0.0.1...


Connected to localhost.localdomain (127.0.0.1).


Escape character is '^]'.


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C#读写锁ReaderWriterLockSlim的.. 下一篇Python Redis链接建立实现分析

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: