首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

DatagramPacket处置中文字符

2012-06-20 
DatagramPacket处理中文字符服务器端:dp new DatagramPacket(buf,1024)//指定接收数据的长度为1024ds

DatagramPacket处理中文字符
服务器端:
dp = new DatagramPacket(buf,1024);//指定接收数据的长度为1024
ds = new DatagramSocket(9012);//此客户端在9012端口监听
ds.receive(dp);
String strInfor = new String(dp.getData()); //接收数据
System.out.println(strInfor); //输出数据
客户端:
input = new BufferedReader(new InputStreamReader(System.in));
System.out.println("输入信息:");//信息输入
tring str = input.readLine();
dp = new DatagramPacket(str.getBytes(),str.length(),
InetAddress.getByName("localhost"),9012);
s.send(dp); //发送数据报


我在客户端输入:我是客户端1,结果在服务器端显示:我是可(也就是只显示了一半),英文和数字显示正常,求解决

[解决办法]

Java code
String strInfor = new String(dp.getData(),"gbk"); //接收数据
[解决办法]
接收端也不要用readLine,采用read(buffer,0,len)的方式。
new String(buffer,0,len,"gbk");的方式。

原因,汉字中带有回车符。
[解决办法]
dp = new DatagramPacket(str.getBytes(),str.length(),
改为
DatagramPacket dp = new DatagramPacket(str.getBytes(),str.getBytes().length,

原因就是构造方法需要你指定发送的字节数组和发送长度,这个长度你搞错了,你写成字符串的长度,实际是字符串的字节数组的长度。

热点排行