接收方
public static void rec(){
try{
DatagramSocket ds=new DatagramSocket(6000);
byte [] buf=new byte[100];
DatagramPacket dp=new DatagramPacket(buf,100);
ds.receive(dp);
System.out.println(new String(buf,0,dp.getLength()));
ds.close();
}
catch(Exception ex){
ex.printStackTrace();
}

发送方
public static void send(){
try{
DatagramSocket ds=new DatagramSocket();
String sstr="你好";
DatagramPacket dp= new DatagramPacket(sstr.getBytes(),sstr.length(),InetAddress.getLocalHost(),6000);
ds.send(dp);
ds.close();
}在发送方的String 中如果用中文的话,就会出现接收数据不完整,如果用英文的话,一点
问题都没有,不知道什么原因

解决方案 »

  1.   

    java中一个中文字符的由两个字节的ASCII码值表示,而英文只有一个字节。如果将中文的两个字节分开显示,就会出现乱码,或者一般字体的情况。输出的话需要转编码!
      

  2.   

    google一下,你会有不少答案。这里有怎么转换双字节字符的方法:
    http://discussion.forum.nokia.com/forum/showthread.php?s=&threadid=36701
      

  3.   

    发送方要修改一个地方
    原:
    DatagramPacket   dp=   new   DatagramPacket(sstr.getBytes(),sstr.length(),InetAddress.getLocalHost(),6000); 
    改正后
    DatagramPacket   dp=   new   DatagramPacket(sstr.getBytes(),sstr.getBytes().length,InetAddress.getLocalHost(),6000); 
    data length 应该是字节数组的长度,而不是字符串长度,并且与字符编码无关~ 这样就绝没什么问题拉
      

  4.   


    ren1xiao1yao 很好啊,你讲的一下子就解决问题了,根本就不是系统和JVM字符集的问题sstr.getBytes().length 这里的length是什么,是字段吗,API哪里有讲
      

  5.   

    其实不是 上面说的问题你看你的 String   sstr= "你好 "; 
    在 你好后面有 一个空格,,你多加一个或者删除一个,绝对可以输出中文不知道你用过 汉化的老板的 JC 没有,上面可以把 一个中文 用鼠标 点成2半
     在输入输出中  读中文最好用 用字符流,那样才是读的一个字String   sstr= "你好 "== 你?
    String   sstr= "你好A"== 你?你可以自己44看