客户端发消息的简化:      String s=sendtext.getText().trim();//从输入框得的要发送的消息
      byte[] data=s.getBytes();
      sendPacket=new
        DatagramPacket(data,s.length(),InetAddress.getByName(theip),sendPort);
             sendSocket.send(sendPacket);}//theip是服务器的IP地址服务器受消息的简化     if(receiveSocket!=null){
     receiveSocket.receive(receivePacket);
     byte[] data=receivePacket.getData();
     String receivedString=new String(data,0).trim();
     }     
服务器发消息的简化
     byte[] databyte=new byte[512];
     receivedString.getBytes(0,receivedString.length(),databyte,0);
     sendPacket=new DatagramPacket(databyte,receivedString.length (),InetAddress.getByName(receiverip),5001);
     sendSocket.send(sendPacket);
客户受消息的简化
receivePacket=new DatagramPacket(array,array.length);
              receiveSocket.receive(receivePacket);
              byte[] data=receivePacket.getData();
              received=new String(data,0,data.length);
               received.trim();
我该怎么编码啊

解决方案 »

  1.   


    出现问题的原因可能是3个机器的默认编码不一致造成的.运行以下下面的程序,看3个机器的默认编码是否一样:
    //Encode.java
    public class Encode {
        public static void main(String args[]) {
            System.out.println(System.getProperty("file.encoding"));
        }
    }
    最好的做法是所有程序在编码和解码是采用同样的编码方式;
    也就是将所有涉及到网络通信的地方做如下修改:
    s.getBytes() 改为 s.getBytes("GB2312");
    new String(data,0,data.length); 改为 new String(data,0,data.length,"GB2312");注意这样修改后,需要捕获异常,做异常处理.
      

  2.   

    我也遇到过类似问题,在发送前把消息转换成BYTE[]打进DatagramPacket,要显示时在String(DatagramPacket.getData(),"gb2312")就可以了。
      

  3.   

    在发消息前全转换成"GB2312"的BYTE[],搞定了,心情爽啊!终于看到汉字了.