【问题标题】:creating a UDP packet I can split创建一个我可以拆分的 UDP 数据包
【发布时间】:2010-10-12 11:29:17
【问题描述】:

我正在 vb.net 中构建一个简单的 udp 局域网聊天应用程序,我想知道我应该如何拆分我的数据包。每个发送的数据包都应该有一个 id、一个用户名和 ip 地址,可能还有一个命令部分,比如加入或离开,以更新我的用户列表和一条短信。我想知道将所有这些放在一个简单的数据包中的最简单方法是什么,然后在收到它时轻松拆分并访问它的不同部分。谢谢。

我正在使用 UDP,因为这仅在局域网中,所以我正在广播到 *.*.*.255

编辑:感谢您的回答,乔恩,但我已经知道这一切。我想知道的是最简单和最强大的方式来格式化我的数据包,使它们包括用户名、id、命令和文本消息,然后接收它的用户解密它以仅显示由哪个写入的消息用户,或者如果它是一个命令,例如加入或离开,以显示加入的适当消息并将用户添加到列表中。

【问题讨论】:

  • 我很困惑您坚持使用哪种格式。是如何应对“长”消息?如果是这样,您将需要某种顺序的数据包 ID - 这意味着实现类似于 TCP/IP 的东西来处理丢失的数据包等。如果不是这样,请澄清。

标签: .net vb.net udp packet


【解决方案1】:

我可能只是在 xml 中格式化数据包,然后在接收端使用 linq to xml 将其分开。您也可以使用 JSON 作为格式,但这可能会稍微难以解析。

【讨论】:

    【解决方案2】:

    使用实例ToByteArray 方法和静态FromByteArray() 方法创建一个适当的类(分别用于序列化为字节数组和从字节数组解析)。然后用UdpClient.Send()发送,UdpClient.Receive()接收。

    您可能希望使用BinaryReader/BinaryWriter 和/或BitConverter 来帮助使用ToByteArrayFromByteArray 方法。您可以使用MemoryStream 作为快速内存流传递给BinaryReader/BinaryWriter

    【讨论】:

    • 有趣的是 C# 中的 char* 等效项,必须再创建大约 4-5 个方法 - 不错。
    • @Zenikoder:如果您谈论的是转储内存的“序列化”,那么以可移植的方式正确处理它比听起来更难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多