none
c# socket 异步UDP RRS feed

  • 问题

  • 2个客户端之间用异步UDP方式通信,但UDP无连接的,我怎么判断收到的数据是我想要的,而且已收完???
    如果只是字符串也就罢了,多点少点也能显示个部分吧。
    但如果是序列化的对象呢?不管多了还是少了都无法反序列化回来了,所以要精确判断数据的开始和结束。这在TCP下还好说,在UDP下如何做呢?

    PS:之所以不用TCP是觉得2个客户端用TCP很麻烦,也不好维护。每次发信息还要判断和目标客户端是否有连接,没连接还要主动去连接。用UDP就省事多了。
    2009年7月6日 3:21

答案

  • 2个客户端之间用异步UDP方式通信,但UDP无连接的,我怎么判断收到的数据是我想要的,而且已收完???
    如果只是字符串也就罢了,多点少点也能显示个部分吧。
    但如果是序列化的对象呢?不管多了还是少了都无法反序列化回来了,所以要精确判断数据的开始和结束。这在TCP下还好说,在UDP下如何做呢?

    PS:之所以不用TCP是觉得2个客户端用TCP很麻烦,也不好维护。每次发信息还要判断和目标客户端是否有连接,没连接还要主动去连接。用UDP就省事多了。

    你可以再每次发送完毕以后在数据末尾加上一串字符串,或者GUID。你把这个数据加到你发送数据结束的位置。
    另一个客户端在接受数据的时候做一次判断。如果等于就表明结束,然后在尝试反序列为本地对象的操作。
    这样也许会帮助你解决检测数据的传输问题
    Frank.Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    老徐的博客:http://frank_xl.cnblogs.com
    • 已标记为答案 HUNDRED 2009年7月7日 0:50
    2009年7月6日 12:18
    版主

全部回复

  • 2个客户端之间用异步UDP方式通信,但UDP无连接的,我怎么判断收到的数据是我想要的,而且已收完???
    如果只是字符串也就罢了,多点少点也能显示个部分吧。
    但如果是序列化的对象呢?不管多了还是少了都无法反序列化回来了,所以要精确判断数据的开始和结束。这在TCP下还好说,在UDP下如何做呢?

    PS:之所以不用TCP是觉得2个客户端用TCP很麻烦,也不好维护。每次发信息还要判断和目标客户端是否有连接,没连接还要主动去连接。用UDP就省事多了。

    你可以再每次发送完毕以后在数据末尾加上一串字符串,或者GUID。你把这个数据加到你发送数据结束的位置。
    另一个客户端在接受数据的时候做一次判断。如果等于就表明结束,然后在尝试反序列为本地对象的操作。
    这样也许会帮助你解决检测数据的传输问题
    Frank.Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    老徐的博客:http://frank_xl.cnblogs.com
    • 已标记为答案 HUNDRED 2009年7月7日 0:50
    2009年7月6日 12:18
    版主
  • UDP 是无连接的协议,有可能会无声无息地丢掉数据的一部分,或者把顺序错乱的数据递给你。

    所以建议你衡量一下两个方面:自己写纠错协议与转用TCP协议,哪个方便一些...
    • 已编辑 IGabriel 2009年7月7日 1:52 别字
    2009年7月7日 1:51