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 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建