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 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题