如何使用 winsock (c++) 发送recv 非字符数据
How to send ecv non char data with winsock (c++)?
我使用 sendto 和 recvfrom 函数通过 winsock 交换数据,但每个参数中的第二个参数是 char* buf。我想发送像 MyStruct* 这样的自定义数据,但我找不到这些函数的类似物来处理 void*。我只是担心,以字符串格式发送数据然后解析它可能很慢且无效。但是,也许有一个强有力的理由迫使程序员以这种方式发送数据?欢迎任何有关情况的信息和任何建议。提前谢谢。
不管
它是char*
还是void*
套接字都可以处理原始字节。因此,只需将您的缓冲区投射到(char*)
,仅此而已
如果你的struct
不包含任何指针或句柄,并且接收器是由你使用相同的编译器和编译标志编写的,并且你不关心可移植性(例如大端架构),那么你只需将MyStruct*
投射到char*
就可以工作了。
在其他情况下,你会死得很惨。不,说真的。这是行不通的。指针和句柄在另一台计算机上没有意义,使用不同的编译器或编译标志可能会导致struct
的布局或填充略有不同,从而使其无用。
通过网络发送结构通常(极少数例外)需要序列化。
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 比较字符数组
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 如何使用 winsock (c++) 发送recv 非字符数据