我工作的第一次客户端 - 服务器程序,我感觉在这里开始了我在做什么严重不足。

我要使用谷歌协议缓冲器以我的客户端之间传输的二进制数据和我的服务器。我将使用Python的变种。的基本思路,据我所知,是客户端将序列中的数据,将其发送到服务器,然后将反序列化的数据。

问题是,我真的不知道从哪里开始的二进制数据发送到服务器。我希望它会是什么“简单”像一个HTTP请求,但我一直在围绕谷歌搜索的方式来传输二进制数据,并在教程,指南和文档广大众多迷路。我甚至不能告诉我们,如果我通过调查HTTP传输找错了树(我希望能使用它,这样我就可以,如果安全性是必要的缺口敲起来,以HTTPS)。我真的不希望有去socket编程的水平,虽然 - 我想转向之前使用可用的库。 (我也宁愿标准Python库,但如果有完善的第三方库,我会活下去。)

因此,如果任何人有一个很好的起点(或想解释一下自己)如何的好办法通过Python二进制数据传输,我会很感激。我跑的服务器当前正在运行的Apache mod_python的有,顺便说一下。

有帮助吗?

解决方案

任何时候,你会从一个系统转移二进制数据到另一个有几件事情要记住。

不同的机器不同存储相同的信息。这有两个含义在内存中,并在网络上。这里更多信息( http://en.wikipedia.org/wiki/Endianness

由于您使用Python中可以削减自己在这里有些松懈(假设客户端和服务器都将在蟒蛇),只需使用cPickle的序列化数据。如果你真的想二进制,你将不得不获得舒适与Python的结构模块( HTTP: //docs.python.org/library/struct.html )。并学习如何包/解压缩数据。

,直到你过去的网络通信的难度我首先开始了简单的线路协议的服务器。如果你从来没有做过这之前它可能会比较混乱非常快。如何发布命令,如何来传递数据,如何重新同步上的错误等等...

如果您已经知道了客户机/服务器协议设计的基础知识,再实践包装和第一磁盘上的包二进制结构。我还指HTTP和FTP的RFC的情况下,对于这样的

------- EDIT基于COMMENT -------- 通常,这样的事情是通过向服务器发送包含该文件的校验和,以及以字节为单位的文件大小的“头”来完成。请注意,我说的不是一个HTTP标头,你可以定制你想要的东西。事件链需要走这样的事情...

CLIENT: "UPLOAD acbd18db4cc2f85cedef654fccc4a4d8 253521"
SERVER: "OK"
(server splits the text line to get the command, checksum, and size)
CLIENT: "010101101010101100010101010etc..." (up to 253521 bytes)
(server reasembles all received data into a file, then checksums it to make sure it matches the original)
SERVER: "YEP GOT IT"
CLIENT: "COOL CYA"

这是过于简化了,但我希望你能看到我在这里谈。

其他提示

我想这取决于你是谷歌协议缓冲如何追平,但你可能想看看 <强>节俭

  

<强>节俭是一个软件框架   可伸缩的跨语言服务   发展。它结合了软件   与代码生成引擎堆叠   构建高效的工作服务   和无缝C ++,Java间,   Python和PHP,红宝石,二郎,Perl中,   哈斯克尔,C#,可可,Smalltalk和   OCaml的。

有是为在其主页上起步很好的例子。

一个简单的问题:为什么二进制?为有效载荷本身的二进制,或者你只是喜欢一个二进制格式? 如果前者,有可能使用base64编码进行JSON或XML太多;它使用更多的空间(〜34%),和位更多的处理开销,但不一定足以关系对于许多用例。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top