请问各位大虾,有两个关于DatagramPacket的小问题请教:
1、在创建用于发送的数据报时:DatagramPacket packet = new DatagramPacket(byte[ ] buf, int length, InetAddress address, int port);其中的length指的是数据报中数据的长度还是整个数据报的长度啊?官方帮助上写的是“包长度”,有的文档上写的是“数据报中数据的长度”。
2、在创建用于接收的数据报时:DatagramPacket packet  = new DatagramPacket(byte[ ] buf, int length);其中的参数length如何理解啊?官方帮助上写的是“要读取的字节数”,这句话不是太理解,是不是指的从buf数组的第一个元素开始读取的字节总数啊,如果指定的字节数和发送方发送过来的数据报中数据的实际长度不一样会怎样呢?请赐教!

解决方案 »

  1.   

    仔细考虑考虑,自己就能得出结果,首先你发送数据,你必然要告诉底层你要发送的byte数组的大小,所以第一个是buf的长度。
    第二个问题,你既然要接受,那么你就应该告诉底层,你存储数据的大小,所以还是buf的大小。
      

  2.   

    第一个问题:
    /**
         * Constructs a datagram packet for sending packets of length 
         * <code>length</code> to the specified port number on the specified 
         * host. The <code>length</code> argument must be less than or equal 
         * to <code>buf.length</code>. 
         *
         * @param   buf      the packet data.
         * @param   length   the packet length.
         * @param   address  the destination address.
         * @param   port     the destination port number.
         * @see     java.net.InetAddress
         */
        public DatagramPacket(byte buf[], int length,
      InetAddress address, int port) {
    this(buf, 0, length, address, port);
        }
    第二个问题:
    /**
         * Constructs a <code>DatagramPacket</code> for receiving packets of 
         * length <code>length</code>. 
         * <p>
         * The <code>length</code> argument must be less than or equal to 
         * <code>buf.length</code>. 
         *
         * @param   buf      buffer for holding the incoming datagram.
         * @param   length   the number of bytes to read.
         */
        public DatagramPacket(byte buf[], int length) {
    this (buf, 0, length);
        }