接收的时候我并不知道发送方发送多少数据,我现在是这样接收的
byte[] buffer = new byte[1500];
DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
mss.receive(dp);
不管别人发送多打的数据我都是接收1500的长度怎么才能实现别人发多少我就收多少呢。百度了一下说是可以使用流输入控制解决,我刚学java的不知道怎么弄,哪位高人帮忙解决一下。

解决方案 »

  1.   

    如果我没有记错的话,一个UDP包最大不会超过65536个字节吧,你就定义这么大的一个数组来接收包就行了
      

  2.   

    定义数据包格式
    常用的格式是一个数据包分头数据头和数据体,类似这样:
    head[
     sequence:int // 数据包序列号
     command:int  // 数据包指令
     length:int   // 数据包长度 可以是数据头+数据体的长度,也可以只是数据体的长度
    ]
    content[
     // 数据体内容
    ]这样数据头的长度就是固定的12位,整个数据包的长度就是12+head.length(或者head.length)
    首先读取12字节的头,然后根据数据包指示的长度去读取数据包其实,不管是TCP或者UDP,数据包的定义一般都是如此
      

  3.   

    谢谢楼上各位,我现在是这样做的。byte[] receive(){
    DatagramPacket dp = getDP();
    byte[] data = dp.getData();
    return Arrays.copyOf(data, dp.getLength());
    } private DatagramPacket getDP(int n) {
    byte[] buffer = new byte[n];
    DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
    try {
    mss.receive(dp);
    } catch (IOException e) {
    e.printStackTrace();
    System.exit(0);
    }
    return dp;
    }