黑马程序员技术交流社区

标题: UDP程序中的一个小问题 [打印本页]

作者: 庄纪光    时间: 2011-10-1 11:11
标题: UDP程序中的一个小问题
在张老师的视频中,关于网络编程这一节编写一个最简单的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));
以上问题就可以解决了。
这个问题我在视频中反复看了好几遍才搞明白,总结出来,跟大家分享一下!
作者: 匿名    时间: 2011-10-1 12:02
我觉得最好将发送的东西搞成一个字节数组在传进去比较好,要不然代码看起来很乱
作者: 匿名    时间: 2011-10-1 12:04
"hello IT资讯交流网".length()  是字符的个数
"hello IT资讯交流网".getBytes().length()  是字节个数
发送的是字节的个数,所以会出现数据丢失的情况,分析得很到位,赞一个!




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