socketServer模块是一个高级模块他可以帮助我们简化很多样板代码 让我们写socket更加轻松。今天我们来写一个关于消息发送与接收的脚本,架构是C/S(客户端与服务端)架构
流程大概是这样子的 代码在下面
服务端代码
from SocketServer import (TCPServer as TCP, StreamRequestHandler as SRH) #导入模块并取别名 as是别名
from time import ctime #导入打印时间模块ctime
HOST = ''
PORT = 22222
ADDR = (HOST, PORT) #bind()方法的表示 绑定主机和端口
class MyRrequestServer(SRH):
def handle(self): #重构handle方法 在StreamRequestHandler中handel方法里面什么都没有 这里的意思是只有有请求过来就先执行handle方法
print '...connected from:', self.client_address #打印客户端地址
self.wfile.write('[%s] %s' % ( ctime(), self.rfile.readline())) #返回数据给客户端 第一个参数是当前时间 第二个参数是打印传过来的数据
#self.wfile.write('Client: %sn ' % str(self.client_address) )
tcpserv = TCP(ADDR, MyRrequestServer) #绑定主机信息
print 'waiting form connet'
tcpserv.serve_forever() #创建TCP服务器
from socket import * #导入socket模块
HOST = 'localhost' #服务端地址 我是本地开启的服务端所以我填localhost
PORT = 22222 #要连接服务端的端口
BUFSIZ = 1024 #缓存区大小设置为1k 可以设置为大一点
ADDR = (HOST, PORT)
while True:
tcpCli = socket(AF_INET, SOCK_STREAM) #分配客户端套接字
tcpCli.connect(ADDR) #主动调用并连接到服务器
data = raw_input('> ') #输入信息提示符
if not data:
break
tcpCli.send('%s\r\n' % data) #发送信息到服务端
data = tcpCli.recv(BUFSIZ) #接收服务端的返回的信息
if not data:
break
print data.strip() #打印接收到的信息
tcpCli.close() #关闭连接
服务端信息
客户端信息
大家可以自行在电脑上敲敲看,感受下socketServer模块的强大。想要获取更多教学资料请+群:330637182 python学习交流无论是新手教学还是项目实战群内应有尽有。