3

我正在使用sendtorecvfrom函数通过 winsock 交换数据,但每个函数中的第二个参数是char* buf。我想发送一个像MyStruct*这样的自定义数据,但我找不到这些函数的类似物来使用void*。我只是担心,以字符串格式发送数据然后解析它可能会很慢且无效。但是,也许有充分的理由强迫程序员以这种方式发送数据?欢迎任何有关情况的信息和任何建议。提前致谢。

4

2 回答 2

4

无论如何,它char*void*套接字是否与原始字节一起工作都没有关系。所以只需将你的缓冲区投射到(char*)就可以了

于 2012-11-27T11:13:50.443 回答
3

如果您struct不包含任何指针或句柄并且接收器是由您使用相同的编译器和编译标志编写的,并且您不关心可移植性(例如大端架构),那么您可以将您的MyStruct*转换为char*并且它将起作用.

在任何其他情况下,你都会死得很惨。不,认真的。它行不通。指针和句柄在另一台机器上没有意义,使用不同的编译器或编译标志可能会导致struct布局或填充略有不同,使其无用。

通过网络发送结构通常需要序列化,极少数例外。

于 2012-11-27T12:23:58.163 回答