一种基于ProtocolBuffer协议的服务端-客户端通信例子 本文关键词:服务端,客户端,例子,协议,通信
一种基于ProtocolBuffer协议的服务端-客户端通信例子 本文简介:一种基于ProtocolBuffer协议的服务端-客户端通信例子XXX(山东潍坊职业学院,潍坊261031)摘要:本文利用Python和基本的socket编程,实现基于protocolbuffer的服务端-客户端通信,通过protocolbuffer,可以实现通信接口的平滑升级。关键词:Python
一种基于ProtocolBuffer协议的服务端-客户端通信例子 本文内容:
一种基于ProtocolBuffer协议的服务端-客户端通信例子
XXX
(山东
潍坊职业学院,潍坊
261031)
摘要:本文利用Python和基本的socket编程,实现基于protocol
buffer的服务端-客户端通信,通过protocol
buffer,可以实现通信接口的平滑升级。
关键词:Python;
Protocol
Buffer;
网络编程;
An
Implement
Of
Server-Client
Communication
Based
On
Protocol
Buffer
XXX
(Weifang
Vocational
College,Shandong
Weifang,261031)
Abstract:
This
article
implement
a
server-client
communication
based
on
protocol
buffer.By
the
protocol
buffer,we
can
update
the
communication
interface
smoothly.
Keywords:
Python;
Protocol
Buffer;
Network
Programming;
1.简介
Protocol
Buffers是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。它不依赖于语言和平台并且可扩展性极强。现阶段官方支持C++、JAVA、Python等三种编程语言,但可以找到大量的几乎涵盖所有语言的第三方拓展包。
Python:Python是一种面向对象、直译式计算机程序设计语言,由Guido
van
Rossum于1989年底发明,第一个公开发行版发行于1991年。Python语法简捷而清晰,具有丰富和强大的类库。Python最大的特点是编程快速易上手。
2.Protcol
Buffer协议定义
Protocol
Buffer是google研发的针对数据描述的语言,相比传统的xml,它更简单易用,描述更清晰,解析更快,数据访问更快。下面看一个例子,例如我们需要描述服务器和客户端的通信协议设计为:
客户端->服务端消息:
FromAddr
ToAddr
CcAddr
Subject
Content
服务端->客户端消息:
ResponseCode
Msg
用xml来描述如下:
客户端->服务端消息:
[email protected]
[email protected]
[email protected]
hell
world
this
is
a
test
服务端->客户端消息:
0
success
用protocol
buffer来描述如下:
客户端->服务端消息:
message
mailReq
{
required
string
from
=1;
required
string
to
=2;
optional
string
cc
=3;
required
string
subject
=4;
required
string
content
=5;
}
服务端->客户端消息:
message
mailRsp
{
required
code
=1;
optioned
msg
=2;
}
3.基于Protcol
Buffer实现服务端和客户端
定义好上述的protocol协议后,采用protoc编译成python代码,产生mailReq_pb2.py和mailRsp_pb2.py
2个文件
客户端发送代码:
import
socket
import
mailReq_pb2.py
import
mailRsp_pb2.py
host=“localhost“port=10000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))
req=
mailReq_pb2.mailReq()
req.from=”
[email protected]”
req.to
=
“[email protected]”
req.cc
=
“[email protected]”
req.subject
=
“hello
world”
req.content
=
“this
is
a
test
mail”
sendData
=
req.SerializeToString()
s.send(sendData)
recvData
=
s.recv(4096)
rsp
=
mailRsp_pb2.mailRsp()
rsp.ParseFromString(recvData)
req
rsp
s.close()
服务端处理代码:
import
socket
import
mailReq_pb2.py
import
mailRsp_pb2.py
host=“localhost“port=10000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))
s.listen(5)
while
1:
sock,addr=s.accept()
“got
connection
form
“,sock.getpeername()
reqData=sock.recv(4096)
if
not
data:
break
else:
req=
mailReq_pb2.mailReq()
req.ParseFromString(reqData)
rsp
=
mailRsp_pb2.mailRsp()
if
req.from
==
“”:
rsp.code
=1
rsp.msg
=
“empty
from
address”
else:
rsp.code
=
0
rsp.msg
=
“success”
rspData
=
rsp.SerializeToString()
sock.send(rspData)
req
rsp
4.总结
本文通过protocol
buffer自定义通信协议,并且实现了一个服务器客户端通信的实例,通过protocol
buffer,用户不再需要关注通信协议中枯燥易错的的编码解码工作,从而可以把精力放在业务处理上,提高开发生产力。
4