日期:2014-05-20  浏览次数:20648 次

关于java接收udp数据包的问题
接收的时候我并不知道发送方发送多少数据,我现在是这样接收的

Java code

byte[] buffer = new byte[1500];
DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
mss.receive(dp);



不管别人发送多打的数据我都是接收1500的长度

怎么才能实现别人发多少我就收多少呢。

百度了一下说是可以使用流输入控制解决,我刚学java的不知道怎么弄,哪位高人帮忙解决一下。

------解决方案--------------------
如果我没有记错的话,一个UDP包最大不会超过65536个字节吧,你就定义这么大的一个数组来接收包就行了
------解决方案--------------------
UDP传输会丢包的。。
------解决方案--------------------
定义数据包格式
常用的格式是一个数据包分头数据头和数据体,类似这样:
head[
 sequence:int // 数据包序列号
 command:int // 数据包指令
 length:int // 数据包长度 可以是数据头+数据体的长度,也可以只是数据体的长度
]
content[
 // 数据体内容
]

这样数据头的长度就是固定的12位,整个数据包的长度就是12+head.length(或者head.length)
首先读取12字节的头,然后根据数据包指示的长度去读取数据包

其实,不管是TCP或者UDP,数据包的定义一般都是如此