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

[root@cai 11.27]# netstat -atnl|grep 9991

tcp        0      0 0.0.0.0:9991                0.0.0.0:*

5.打开: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 '^]'.

Python向PHP发起GET与POST请求

《Python核心编程 第二版》.(Wesley J. Chun ).[高清PDF中文版]

《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码]

Python脚本获取Linux系统信息

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/2e223fdc0486eeed21dd766b5c11813d.html