UDP丢包

本机对本机发视频包,采用jrtplib协议栈,基于udp的,对协议栈收到的数据包打印序号,发现中途丢了一些包,请问这些包是由于socket缓冲区慢了才丢的吗?
2009-04-17 21:18:00  kemeng123
3.udp没有流量控制,因此发送速度比接收速度快,很容易出现这种情况
三种可能你都看看 排除下
2009-04-17 22:06:00  哦!平静
有什么不可能的.
2009-04-17 22:47:23  未来之星
本机对本机发送还会不成功吗?对于视频传输来讲,不需要重传机制,做好容错处理就可以了。
2009-04-17 23:30:00  lqz41
靠,不要给我解释tcp udp的原理,我想问包在哪个环节丢了
另外,只能用udp来传输视频数据。
2009-04-18 03:06:00  红蓝青
我关心的是谁给丢了?是socket缓冲区满了丢的吗?
2009-04-18 03:36:00  逸风小子JK

同意。
2009-04-18 04:06:02  shanzhh
UDP不保证可靠。
2009-04-18 04:36:34  爱晨晨
udp本身是无状态的,无确认的, 用tcp
2009-04-18 05:10:54  小菩提
如果两台机器测试,局域网内,通过ethereal看了,包已经发到本地了。
2009-04-18 05:36:01  博学之
udp一次不能超过512,超过了当然会丢包啊.可以加个较验和,丢包重发.
2009-04-18 05:55:40  liuxin591591
设置socket缓冲区大小可以解决这个问题吗?
2009-04-18 06:23:04  wangjingxuan817
由于udp协议本身没有自动找包的功能,因此经常会出现丢包的现象,会造成传送的文件丢包的现象
1.你看下发送端是否发送成功
2.你再用抓包工具看看 是否收到了 看下是网络问题 还是你程序问题

2009-04-18 06:45:06  外宇星云
使用UDP时,如果缓冲区已满,再发来的包就会丢失。
2009-04-18 07:06:00  kelly0215
很正常
我做的项目,采用的是RTP + UDP,丢包是很正常的,如果你用TCP,那么延迟就太大啦,没法看了
还有,网通和电信的接口处最容易丢包
至于丢包的率取决与网络连接状况.包没发过来才导致丢包,和你的接收缓冲区有什么关系啊?呵呵
2009-04-18 07:24:38  万剑辉
UDP是无连接的,面向消息的数据传输协议,与TCP相比,有两个致命的缺点,一是数据包容易丢失,二是数据包无序。

要实现文件的可靠传输,就必须在上层对数据丢包和乱序作特殊处理,必须要有要有丢包重发机制和超时机制。

常见的可靠传输算法有模拟TCP协议,重发请求(ARQ)协议,它又可分为连续ARQ协议、选择重发ARQ协议、滑动窗口协议等等。

如果只是小规模程序,也可以自己实现丢包处理,原理基本上就是给文件分块,每个数据包的头部添加一个唯一标识序号的ID值,当接收的包头部ID不是期望中的ID号,则判定丢包,将丢包ID发回服务端,服务器端接到丢包响应则重发丢失的数据包。

模拟TCP协议也相对简单,3次握手的思想对丢包处理很有帮助。
2009-04-18 07:42:00  金色之心
ethereal都看到包过来了,你能说包还没到吗?局域网内两台机器测试。
2009-04-18 08:00:00  黄子俊
udp丢包很正常吧 丢包了 你检查到 再请求发丢了那个序号的包就可以了
2009-04-18 08:12:00  weiweibnu
UDP协议本身就不保证一个发送成功,所以需要重发机制等..
2009-04-18 08:27:07  huaizheqi
你传输视频 如果是压缩的比较厉害的
那就不Y要用UDP 呀。关于丢包原因 如果在局淤网 则可能是你收的比较慢
如果在公网 那就是 UDP 本身的原因 你找出来也没用

你的解决方式 只能是TCP 或者RTCP 之类
2009-04-18 08:48:00  燕子MM
一个原因,就是接收慢了
缓冲区满,丢掉了。
2009-04-18 09:03:40  糖果小妖
不想丢包,直接用TCP呗。简单。
2009-04-18 09:18:00  想学习
人品问题?    开玩笑,哈,你说的是有可能的, 没有什么不可能,!
2009-04-18 09:30:00  sweet百分百
UDP是面向无连接的 传输不具有可靠性,丢包是难免的,但应该不会影响到传输

另外1楼说的请求重发是TCP的重传~UDP没有
2009-04-18 09:39:37  wangyn990428
加大缓冲只能缓解问题,另外还应让程序尽快接收缓冲区中的数据,不过也不能完全避免这个问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UDP协议是无连接的,不保证数据传输的可靠性,因此在网络传输过程中会出现丢包的情况。Java中使用UDP协议进行网络编程时,也会遇到UDP丢包的问题。 解决UDP丢包问题的方法有以下几种: 1. 减小数据包的大小,可以通过切割小包并sleep发送来解决。 2. 减小数据包的发送速度,可以通过限制发送速度来减小数据包的发送速度,从而减少丢包的情况。 3. 使用TCP协议进行数据传输,TCP协议是面向连接的,保证数据传输的可靠性,但是会增加网络传输的开销。 4. 实现丢包重传的机制,当发现数据包丢失时,可以重新发送数据包,直到接收方正确接收到数据包为止。 在Java中,可以使用DatagramSocket和DatagramPacket类来实现UDP协议的网络编程。在发送数据包时,可以使用DatagramPacket类的send()方法发送数据包;在接收数据包时,可以使用DatagramSocket类的receive()方法接收数据包。为了避免丢包,可以在接收数据包后立即重新回到监听状态,尽量避免复杂的操作。 以下是Java中使用UDP协议进行网络编程的示例代码: ```java // 发送数据包 DatagramSocket socket = new DatagramSocket(); String message = "Hello, world!"; byte[] data = message.getBytes(); InetAddress address = InetAddress.getByName("127.0.0.1"); DatagramPacket packet = new DatagramPacket(data, data.length, address, 8888); socket.send(packet); // 接收数据包 DatagramSocket socket = new DatagramSocket(8888); byte[] buffer = new byte[1024]; DatagramPacket packet = new DatagramPacket(buffer, buffer.length); socket.receive(packet); String message = new String(packet.getData(), 0, packet.getLength()); System.out.println("Received message: " + message); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值