Kuneng
2018-08-02 17:49
byte[] data = new byte[1024];//创建字节数组,指定接受的数据包的大小
System.out.println(data);
DatagramPacket datagramPacket = new DatagramPacket(data, data.length);
//3.接受客户端发送的数据
System.out.println("服务器机即将启动,等待客户端的连接");
datagramSocket.receive(datagramPacket);//此方法在接受到数据包之前会一直阻塞
System.out.println(data);// ??? data值改变
System.out.println(datagramPacket.getData());
//4.读取数据
String info = new String(data, 0, datagramPacket.getLength());
System.out.println("我是服务端,客户端说:" + info);
第7行data值发生了改变???
我觉得真正对data数组动手脚的应该是receive方法 会不会是返回一个data数组覆盖了前面定义的数组呢?
datagramSocket.receive(datagramPacket);这里获取到了数据包,data值当然会变啊。详细代码说明:https://blog.csdn.net/ljcgit/article/details/81450491
首先第一点:在java里,只有值传递。
你可能是刚学完c语言吧。你的面向对象思想还需要加强。
data指向的是一个一个字节数组,如果在data数组作为参数的方法里,改变data数组的指向(也就是指向另一片内存),自然不会改变data数组的值(不会改变原来内存的值)。但是,改变的是data数组里的元素,这就是直接修改data数组指向的内存的值了。
Java Socket应用---通信是这样练成的
125013 学习 · 590 问题
相似问题
回答 1