在 C# 中,我使用二进制序列化通过流发送信息。这非常简单,因为您所做的就是创建一个类,将其序列化,然后在接收端反序列化。
我的问题是,如何在 C++ 中做类似的事情?我见过的所有网络示例都发送一个 const char * like;
send("LOGIN");
如果我想通过网络发送一个字符串和一个整数,我真的必须麻烦将两者都转换成字符串,在它前面放一个命令,然后再发送吗?
[PSEUDO-CODE]
send("COMMAND|" + tostring(someInteger) + "|" + someString);
然后在接收端,拆分这个字符串并解析?我想当我存储了一个 vector 并且我想通过网络发送它时,这会变得很复杂。
我能做什么?
最佳答案
有几个serialization格式和库(但在 C++11 标准之外)。
实际上,您的问题是特定于操作系统的。我猜你使用的是 Linux 或一些 Posix 系统。
我通常建议在 textual format 中进行序列化(更容易调试)。然后考虑像 JSON 这样的格式(或 YAML ,甚至可能是 XML - 但我不推荐它,因为它太复杂 - 等等......)并使用像 JSONCPP 这样的库
在大多数情况下(但并非总是如此!),网络传输 - 毫秒 - 比序列化计算 - 微秒 - 慢得多,因此文本序列化开销并不重要
如果你想要一些二进制序列化(注意 endianess 问题),也许可以考虑 libs11n , XDR等... 另见 htonl(3)
始终记录(并保持最新的文档)您的protocol .
对于传输,请使用 TCP/IP(或高于它的东西,例如 HTTP 、 0MQ 等...)。在 Linux 和 Posix 上,请参阅 socket(7)和 tcp(7)并阅读一些tutorial on BSD sockets .
您可能需要编写一些代码 event loop使用 poll(2) (或使用现有的事件循环框架,libev
、libevent
、来自 GTK 的 Glib、来自 Qt 的 QtCore 等等等...)
关于c++ - 通过网络发送数据的常用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25153490/