C处理多种类型的UDP数据包

时间:2013-05-08 18:14:59

标签: c sockets udp

我正在编写一个侦听传入UDP数据包的应用程序。有可能接收到许多不同类型的数据包。例如,数据包可以这样定义,

  

套餐A:| int a | char b | int c |

     

包装B:| short int d | int e | char f |

等等。

我的问题是,鉴于我收到了多种类型的消息,有什么方法可以协调发送的内容和我正在阅读的内容?

正如我所看到的,可以在每条消息的开头添加“标题”,定义其类型,或者我可以读取消息长度并将其与我列出的内容进行比较,如果我知道每个数据包的大小。

另外,如果后者是一个选项,那么每次保证数据包是否为预期长度?

修改

我还可以看到只使用数据包长度的问题,因为可能存在多个相同长度的消息类型。

1 个答案:

答案 0 :(得分:3)

使用包含魔术字的标题和定义类型的代码。这样您就可以确保它适用于您的应用程序,并确定要使用的正确解析器。

序列号和时间戳也可用于检测丢失的数据包和不按顺序到达的数据包。这些是UDP遇到的常见问题。