在张老师的视频中,关于网络编程这一节编写一个最简单的UDP程序中。
在UdpSend发送数据程序中有一段这样的代码:
ds.send(new DatagramPacket("hello www.it315.org".getBytes(),"hello www.it315.org".length(),
InetAddress.getByName("192.168.0.3"),3000));
在接收端收到的数据为:hello www.it315.org from 192.168.0.3:1095
如果将这段代码改为:
ds.send(new DatagramPacket("hello IT资讯交流网".getBytes(),"hello IT资讯交流网".length(),
InetAddress.getByName("192.168.0.3"),3000));
则在接收端收到的数据为:from 192.168.0.3:1095
原因在于在发送的字符串中出现了中文字符时,中文字符转换为字节时是两个字节,因此"hello IT资讯交流网".length()的字符串长度小于实际得到的字节数组的字节长度,而我们在这里要发送的是字节个数不是字符个数。因此会出现接收到的数据丢失的问题。
如果将这段代码改为这样,
ds.send(new DatagramPacket("hello IT资讯交流网".getBytes(),"hello IT资讯交流网".getBytes().length(),
InetAddress.getByName("192.168.0.3"),3000));
以上问题就可以解决了。
这个问题我在视频中反复看了好几遍才搞明白,总结出来,跟大家分享一下! |