c++ - 通过网络发送数据的常用方法是什么?

标签 c++ sockets

在 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(或高于它的东西,例如 HTTP0MQ 等...)。在 Linux 和 Posix 上,请参阅 socket(7)tcp(7)并阅读一些tutorial on BSD sockets .

您可能需要编写一些代码 event loop使用 poll(2) (或使用现有的事件循环框架,libevlibevent、来自 GTK 的 Glib、来自 Qt 的 QtCore 等等等...)

另见 JSON-RPC , MPI等等

关于c++ - 通过网络发送数据的常用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25153490/

相关文章:

c++ - 为什么我必须重新解释_cast 指针指针?

c++ - 为什么来自 IBM XL C/C++ 编译器的警告?

c++ - 图像数据矩阵中的偏移值及其对整数值的影响

python - 如何根据客户请求干净地退出 Pyro 守护进程?

sockets - 带有非 socket.io 服务器的 Socket.io 客户端

python - 如何在 python 中通过套接字发送数组

c++ - 获取 Linux 机器上所有连接的 IP

c++ - 小程序的makefile/script

java - Android Studio 错误无法识别的窗口套接字

c - 缺少哪个库,而不是与 lws2_32 链接?