首页 范文大全 古典文学 职场知识 中国文学 公文书信 外国名著 寓言童话 百家讲坛 散文/诗歌 美文欣赏 礼仪知识 民俗风情
  • 范文大全
  • 古典文学
  • 职场知识
  • 中国文学
  • 公文书信
  • 外国名著
  • 寓言童话
  • 百家讲坛
  • 散文/诗歌
  • 美文欣赏
  • 礼仪知识
  • 民俗风情
  • 谜语大全
  • 名言警句
  • 一种基于ProtocolBuffer协议服务端-客户端通信例子

    时间:2021-02-17 18:10:47 来源:蒲公英阅读网 本文已影响 蒲公英阅读网手机站

    相关热词搜索:服务端 客户端 例子

    一种基于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

    Google

    Protocol

    Buffer

    XXX

    (Weifang

    Vocational

    College,Shandong

    Weifang,261031)

    Abstract:

    This

    article

    implement

    a

    server-client

    communication

    based

    on

    google

    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

    mail

    服务端->客户端消息:

    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)

    print

    req

    print

    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()

    print

    “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)

    print

    req

    print

    rsp

    4.总结

    本文通过protocol

    buffer自定义通信协议,并且实现了一个服务器客户端通信的实例,通过protocol

    buffer,用户不再需要关注通信协议中枯燥易错的的编码解码工作,从而可以把精力放在业务处理上,提高开发生产力。

    4

    • 范文大全
    • 职场知识
    • 精美散文
    • 名著
    • 讲坛
    • 诗歌
    • 礼仪知识