qq_35927590 2016-11-25 16:43 采纳率: 33.3%
浏览 3036
已采纳

java 网络编程求助 getData().length 和 直接getLength()效果不一样

写了两个类,一个是发送端,一个是接收端。
接收端写了两个字符串,为什么用dp.getData().length这个就打不出来后面的部分呢?
查了一下 .length这个是1024,创建新String时候如果空格太多就自动中止吗?另外getLength()为什么能直接是12呢?

输出:
hello world! from 192.168.31.204 port 9999
hello world!

程序:
package com.network;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class ServerTest {

public static void main(String[] args) throws Exception {
    byte[] buf = new byte[1024];
    DatagramSocket ds = new DatagramSocket(8891);
    DatagramPacket dp = new DatagramPacket(buf,1024);
    ds.receive(dp);
    String str1 = new String(dp.getData(),0,dp.getLength())+" from "+dp.getAddress().getHostAddress()+" port "+dp.getPort();
    System.out.println(str1);//正常
    String str2 = new String(dp.getData(),0,dp.getData().length)+" from "+dp.getAddress().getHostAddress()+" port "+dp.getPort();
    System.out.println(str2);  //这里返回的就不带from和后面那一截了,为什么呢?
    ds.close();
}

}

package com.network;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class ClientTest {

public static void main(String[] args) throws Exception {
    String str = "hello world!";
    byte[] buf = new byte[1024];
    DatagramSocket ds = new DatagramSocket(9999);
    DatagramPacket dp = new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getLocalHost(), 8891);
    ds.send(dp);
    ds.close();

}

}

  • 写回答

1条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      悬赏问题

      • ¥15 用stata编写,数据集是Excel形式
      • ¥15 希望得到帮助,希望得到帮助
      • ¥15 Win7电脑开机出现硬件设置已更改
      • ¥15 vba代出现莫须有错误,都是一个个复制下来的为啥出错呢?
      • ¥15 /etc/vsftpd/vsftp.conf配置文件加了一行utf8_filesystem=YES之后,启动vsftpd报错
      • ¥15 W5100可以收广播,但是无法发出广播
      • ¥100 PCD点云排序和分割
      • ¥15 GG-CNN抓取数据集
      • ¥15 C++类和对象,多态性,继承,虚函数虚基类
      • ¥15 使用VS2019和Dev c++按%p输出地址,结果相差很大