如何使用 winsock (c++) 发送recv 非字符数据

How to send ecv non char data with winsock (c++)?

本文关键字:recv 字符 数据 发送 何使用 winsock c++      更新时间:2023-10-16

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

不管

它是char*还是void*套接字都可以处理原始字节。因此,只需将您的缓冲区投射到(char*),仅此而已

如果你的struct不包含任何指针或句柄,并且接收器是由你使用相同的编译器和编译标志编写的,并且你不关心可移植性(例如大端架构),那么你只需将MyStruct*投射到char*就可以工作了。

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

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