黑马程序员技术交流社区

标题: udp 模拟发送的小问题 [打印本页]

作者: 李厚斌    时间: 2014-4-3 03:05
标题: udp 模拟发送的小问题
本帖最后由 李厚斌 于 2014-4-6 16:03 编辑
  1. class UdpReceive implements Runnable{
  2.         private DatagramSocket ds;
  3.         UdpReceive(DatagramSocket ds){
  4.                 this.ds=ds;
  5.         }
  6.         @Override
  7.         public void run() {
  8.                 // TODO Auto-generated method stub
  9.                 byte[] buf=new byte[1024];
  10.                 DatagramPacket dp=new DatagramPacket(buf,buf.length);
  11.                 while(true){
  12.                         try {
  13.                                 ds.receive(dp);
  14.                                 String ip=dp.getAddress().getHostAddress();
  15.                                 //String data=new String(dp.getData(),0,dp.getLength());//这个地方。如果我写成这样的话
  16.                                 byte[] b=dp.getData();
  17.                                 String data=new String(b,0,b.length);
  18.                                 System.out.println(data+"ffe");
  19.                                 System.out.println(data+":"+dp.getAddress().getHostAddress());
  20.                         } catch (IOException e) {
  21.                                 // TODO Auto-generated catch block
  22.                                 e.printStackTrace();
  23.                         }
  24.                         
  25.                 }
  26.         }
  27.         
  28. }
复制代码
代码是udp服务端接受信息的。。全程是模拟两个线程一个线程接受一个线程发送。。

见鬼了。。。琢磨半天
//String data=new String(dp.getData(),0,dp.getLength());
这个地方。如果我写成这样的话
System.out.println(data+"ffe");
System.out.println(data+":"+dp.getAddress().getHostAddress());
后面的这两句话能正常打印。。。


可是如果我这么写
byte[] b=dp.getData();
String data=new String(b,0,b.length);
就不能。只能打印data。。后面的全部打印不到了。。能完全读到data数据

作者: osully    时间: 2014-4-3 09:05
String data=new String(dp.getData(),0,dp.getLength());
这句是标准写法,完全没问题
应该是你其他地方的问题




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2