在C#中,我使用二进制序列化在Stream上发送信息。这很简单,因为您所做的只是创建一个类,对其进行序列化,然后在接收端对其进行反序列化。
我的问题是,如何在C ++中做类似的事情?我见过的所有网络示例都发送了一个const char * like;
send("LOGIN");
如果我希望通过网络发送一个字符串和一个整数,我是否真的要麻烦将两者都转换为字符串,在它前面放一个命令,然后发送;
[PSEUDO-CODE]
send("COMMAND|" + tostring(someInteger) + "|" + someString);
然后在接收端,拆分此字符串并解析?我想,当我存储了一个矢量并且我想通过网络发送它时,这会变得复杂。
我该怎么办?
答案 0 :(得分:2)
有几种serialization格式和库(但在C ++ 11标准之外)。
实际上,您的问题是特定于操作系统的。我想你使用Linux或一些Posix系统。
我通常建议在textual format中进行序列化(更容易调试)。然后考虑像JSON(或YAML,甚至XML这样的格式 - 但我不推荐它,因为它过于复杂等等...)并使用像{{{} {3}}
在大多数情况下(但并非总是!),网络传输 - 毫秒 - 比序列化计算慢得多 - 微秒 - 因此文本序列化开销并不重要
如果您想要一些二进制序列化(谨防JSONCPP问题),请考虑endianess,libs11n等...另请参阅XDR
始终文档(并及时了解文档)htonl(3)。
对于传输,请使用TCP / IP(或其上方的内容,例如protocol,HTTP等)。在Linux和Posix上,请参阅0MQ和socket(7)并阅读一些tcp(7)。
您可能需要使用tutorial on BSD sockets对某些event loop进行编码(或使用现有的事件循环框架,libev
,libevent
, Glib 来自Qt的GTK, QtCore 等等......)
答案 1 :(得分:1)
C#具有Windows Communication Foundation(WCF),您可以使用它来序列化&通过网络发送消息。它还通过HTTP,TCP或HTTPS处理底层传输。您可以在此处了解更多信息: http://msdn.microsoft.com/en-us/library/vstudio/ms731079%28v=vs.90%29.aspx
答案 2 :(得分:-1)
谷歌的protobuf库实际上还不错