您的位置:首页 > 编程语言 > Python开发

python socket编程(2)-SocketServer 模块

2015-12-27 22:11 746 查看
之前写的网络编程的只是为了理解socket编程的过程,如果真的要写这样的程序,还不如用c来写,代码效率高的不是一点俩点。记得大二写过c的socket编程,都按qq的方式写的。添加好友,用户对话,自动回复。

正题来了

SocketServer模块是标准库中的一个高级别模块。用来简化实现网络客户端与服务器所必须的大量样式编码。

SocketServer 模块的类

描述
BaseServer包含服务器核心功能与混合(mix-in)类挂钩;这个类只用来派生,所以不会生成类的实例;
TCPServer/UDPServer基本的网络同步TCP/UDP服务器
UnixStreamServer/UnixDatagramServer基本的基于文件同步
ForkingMinIn/ThreadingMixIn实现了核心的进程化或线程化的功能,作为混合类,与服务器一并使用,提供一些异步特性;不会实例化
ForkingTCPServer/ForkingUDPServerForkingMixIn和TCPserver/UDPServer的组合
TreadingTCPServer/TreadingUDPServer同上
BaseRequestHandler包含处理服务器请求的核心功能,这个类只能用于派生
StreamRequestHandler/DatagramRequestHandler用于TCP/UDP服务器的服务处理工具
现在利用模块来重新编写服务器和客户端

服务器:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from SocketServer import (TCPServer as TCP,StreamRequestHandler as SRH)
from time import ctime
 
HOST = ''
PORT = 5002
ADDR = (HOST,PORT)
 
class MyRequestHandler(SRH):
def handle(self):
print '.....connected from:',self.client_address
#write()函数把字符串发给客户端  readline()得到客户信息
self.wfile.write('[%s] %s' % (ctime(),self.rfile.readline()))
 
tcpServ = TCP(ADDR,MyRequestHandler)
print 'waiting for connection...'
tcpServ.serve_forever()    #无限循环中。。。


客户端程序就稍稍改一下前面的tcp代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from socket import *
HOST = '127.0.0.1'
PORT = 5002
BUFSIZE = 1024
ADDR = (HOST,PORT)
while True:
client = socket(AF_INET,SOCK_STREAM)
client.connect(ADDR)
data = raw_input('>')
if not data:
break
client.send('%s\n' % data)
data = client.recv(BUFSIZE)
if not data:
break
print data.strip()
client.close()
#SockServer 的请求处理器的默认行为是接收连接,得到请求,然后就关闭连接。
#所以客户端每次发送数据要创建新socket
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: