A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 庄纪光 黑马帝   /  2011-10-1 11:11  /  2148 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在张老师的视频中,关于网络编程这一节编写一个最简单的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));
以上问题就可以解决了。
这个问题我在视频中反复看了好几遍才搞明白,总结出来,跟大家分享一下!

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

2 个回复

倒序浏览
黑马网友  发表于 2011-10-1 12:02:35
沙发
我觉得最好将发送的东西搞成一个字节数组在传进去比较好,要不然代码看起来很乱
回复 使用道具 举报
黑马网友  发表于 2011-10-1 12:04:32
藤椅
"hello IT资讯交流网".length()  是字符的个数
"hello IT资讯交流网".getBytes().length()  是字节个数
发送的是字节的个数,所以会出现数据丢失的情况,分析得很到位,赞一个!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马