HoRinbb 2019-07-09 01:33 采纳率: 0%
浏览 282

关于Java网络通信_UDP的几个问题

UDP发送端:

DatagramPacket dp=new DatagramPacket(buf, length, address, port);

其中,buf指所需要发送的数据,length指的是包的长度(官方文挡解释)。
问题1:若buf长度为很大,远大于length,那么上面的语句是将数据打包成一个数据丢失的数据包还是多个长度为length的数据包?


UDP接收端:

DatagramSocket ds=new DatagramSocket(10086);

byte[] buf=new byte[1024];

int length=buf.length;

DatagramPacket p=new DatagramPacket(buf, length);

ds.receive(p);

问题2:DatagramPacket用来接收长度为length的数据包,若发送端数据包长度为1024,接收端在此的length设为100,数据是否会丢失?

问题3:receive(p)方法到底接收的是一个包还是所有的包?

  • 写回答

1条回答 默认 最新

  • 毕小宝 博客专家认证 2019-07-09 10:12
    关注

    第一个问题,不会,因为它会分包发送的;第二个问题,也不会,接收端缓存只有100 就只能收到 100 的数据,其他数据还在 Socket 的缓冲区中。
    如果不读取到内存中处理,只能说明代码写的有问题。如果缓冲区 定义为 100 ,应该循环读取到内存中,知道 Socket 中没有数据为止。

    并不是说内存缓冲区定义为 100 ,就只读取一次,应该分多次读取才对。

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题