100分!!!!!!关于UDP接收数据的问题

Magic丶旭 2015-11-04 10:33:30
对于接收数据,我有一个思路,发送的时候在头4个字节保存数据的字节数,接收的时候先接收头4个字节,因为这4个字节是保存了数据的字节数的,然后动态new一个这4个字节里保存的长度的缓冲区去接收剩余的数据,这是我的一个思路。 我在TCP里面可以完美实现,UDP具体该怎么实现?
...全文
167 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Magic丶旭 2015-11-05
  • 打赏
  • 举报
回复
手机CSDN怎么结帖?
爱摸鱼de老邪 2015-11-05
  • 打赏
  • 举报
回复
udp是无连接的、不可靠的传输层协议,丢包处理你得自己在应用层实现。
skgary 2015-11-05
  • 打赏
  • 举报
回复
引用 楼主 csdn1223537114 的回复:
对于接收数据,我有一个思路,发送的时候在头4个字节保存数据的字节数,接收的时候先接收头4个字节,因为这4个字节是保存了数据的字节数的,然后动态new一个这4个字节里保存的长度的缓冲区去接收剩余的数据,这是我的一个思路。 我在TCP里面可以完美实现,UDP具体该怎么实现?
UDP是按包的,所以,应该控制一个UDP的包在1450byte以下 至于长度问题,UDP则不需要按数据长度进行考虑,而是应该通过序号或者分组来确认包是否丢失
dracularking 2015-11-04
  • 打赏
  • 举报
回复
因为UDP可能会丢包,是不是传送的数据帧带上序号
eewcee 2015-11-04
  • 打赏
  • 举报
回复
我觉得这样,为了保证数据包的完整性,有效性,应该定制协议规范。 像普通的协议,可能只需要传 文字就可以,以换行符作为一条数据的结尾。 但是如果数据量大,实际情况,TCP或者UDP都有可能分多次将数据包写过来,你可能没法一次性读取到。 我建议: 自己制定一个协议规范 比如 帧头:0xFF0xFF 数据区长度:0000111 数据区:........ CRC校验:FFFF 帧尾:0X0A0x0D 具体协议根据你传输的内容来定制一个合适的。 收数据的时候根据帧头帧尾获取数据包,并且对数据帧进行校验,无效数据请求重发或者丢弃(网络糟的时候可能无法接受完整数据)。 这样可以保证程序正常。
马七甲 2015-11-04
  • 打赏
  • 举报
回复
好思路

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧