python中的SocketServer.StreamRequestHandler类中的读写说明

本文介绍了一个使用Python的SocketServer模块实现的单线程服务器程序。该服务器能够接收客户端发送的不同命令,并根据命令进行相应的处理。文章展示了如何使用StreamRequestHandler类的rfile属性来读取客户端的数据,并使用wfile属性来向客户端发送数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SocketServer.StreamRequestHandler中对客户端发过来的数据是用rfile属性来处理的,rfile是一个类file对象.有缓冲.可以按行分次读取;发往客户端的数据通过wfile属性来处理,wfile不缓冲数据,对客户端发送的数据需一次性写入.
如下代码:
#! /usr/bin/env python
#coding=utf-8
'''
单线程服务器程序
'''
from SocketServer import TCPServer as TCP, StreamRequestHandler as SRH

class MyTCPHandler(SRH):
def handle(self):
'''
覆盖方法,对父类的方法重写
'''
self.firstline=self.rfile.readline().strip()

#命令分发
if(self.firstline=='login'):
print 'if login'
name=self.rfile.readline().strip()
print name
pwd=self.rfile.readline().strip()
print name
self.login(name,pwd)
elif(self.firstline=='start_server'):
pass
elif(self.firstline=='stop_server'):
pass
elif(self.firstline=='open_firewall'):
pass
elif(self.firstline=='close_firewall'):
pass
elif(self.firstline=='read_firewall_ip_list'):
pass
elif(self.firstline=='write_firewall_ip_list'):
pass
elif(self.firstline=='read_server_ip_list'):
pass
elif(self.firstline=='write_server_ip_list'):
pass
elif(self.firstline=='remote_update'):
pass
elif(self.firstline=='local_synchronize'):
pass
else:
print 'error'
'''print self.rfile.readline()
print self.rfile.readline()
'''
line=self.rfile.readline()
while line!='':
#self.wfile.write('%s' % line)
line=self.rfile.readline()
print line
self.wfile.write('ok'+'ok2'+'ok3')#这里的ok,ok1,ok2不能分次write,会报错

def login(self,name,pwd):
print 'login'
self.wfile.write(name+pwd+'ok')

if __name__ == "__main__":
#本机,使用端口9999
HOST, PORT = "localhost", 9999

# 创建服务器并绑定到本机的9999端口
server = TCP((HOST, PORT), MyTCPHandler)

# Activate the server; this will keep running until you
# interrupt the program with Ctrl-C
server.serve_forever()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值