日期:2014-05-20  浏览次数:20706 次

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,

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