在我的程序中,我有一些结构和一个char数组,我想通过UDP作为单个实体发送.
我正在努力想出一个很好的方法来做到这一点.
我的第一个想法是创建一个包含我想要发送的所有内容的结构但是使用sendto()的类型是错误的
我如何将两个结构和一个char数组存储在另一个数组中,以便按照我的预期方式接收它?
谢谢
因为C允许你投射到你内心的内容,所以没有错误的类型sendto()
.您只需将结构的地址强制转换为a void *
并将其作为参数传递给sendto()
.
但是,很多人会对你印象深刻的是,不建议首先以这种方式发送结构:
如果连接任何一方的程序是由不同的编译器或不同的环境编译的,那么你的struct
s可能不会有相同的打包.
如果参与转移的两个主机没有相同的内容,则部分数据将以向后的方式结束.
如果主机架构不同(例如32位与64位),那么结构的大小也可能会关闭.当然,如果基本数据类型(int,char,long,double等)的大小不同,则会出现大小差异.
所以......只有当你确定你的两个主人是同卵双胞胎或足够接近它时,请接受第一段的建议.
在其他情况下,请考虑将您的数据转换为某种中性文本表示形式,它可以是XML,但不需要是任何复杂的东西.字符串作为一个字节序列发送,并且可以出错的少得多.由于您可以控制格式,因此您应该能够在接收端轻松解析这些内容.
更新
你提到你正在转移大部分位字段.这意味着你的数据本质上由一堆整数组成,所有这些整数都小于(我假设)32位.
因此,我对"干净"解决方案的建议是编写一个函数来解压所有这些位字段,并将整个工作作为一个(可能是无符号的)整数数组运送.假设sizeof(int)
在各个机器上是相同的,htons()
将在这些数组的元素(每个单独!)上成功运行,然后您可以将它们包装回另一侧的结构中.