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

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条回答 默认 最新

  • dabocaiqq 2016-11-26 15:25
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错