byte[] b;
String str = new String(b, "GBK");注意字符编码就可以了

解决方案 »

  1.   

    试过了,但不成呀,再指教!
    发送程序片段如下:
    void sendData()
    {
    try
    {
    String msg=textField1.getText ();
    if(msg.equals (""))
    return;
    textField1.setText ("");
    InetAddress address=InetAddress.getByName ("202.192.247.211");
    int len=msg.length ();
    byte[] message=new byte[len];
    msg.getBytes(0,len,message,0);
    DatagramPacket packet =new DatagramPacket (message,len,address,9999);
    DatagramSocket socket=new DatagramSocket ();
    socket.send (packet);
    }
    catch(Exception e)
    {
    }
    }接收程序片段如下:void waitForData()
    {
    try{
    byte[] buffer=new byte[1024];
    DatagramPacket packet=new DatagramPacket (buffer,buffer.length );
    DatagramSocket socket=new DatagramSocket (9999);
    while(true)
    {
    socket.receive(packet);
    String s=new String(buffer,0,0,packet.getLength ());
    textArea1.append (s+"\n");
    packet=new DatagramPacket (buffer,buffer.length);
    }
    }
    catch(Exception e)
    {
    }
      

  2.   

    用这个吧。
    public static int StringTobytes(String pStrSource,byte[] pbArDest,int piStartPos)
      {
        if(piStartPos<0 || pbArDest == null)
          return 0;
        byte[] bArTemp = pStrSource.getBytes();
        int iNormalLen = bArTemp.length;
        if(pbArDest.length < piStartPos+iNormalLen+2)
          return 0;
        for(int i=0;i<iNormalLen;i++)
          pbArDest[piStartPos+i] = bArTemp[i];
        //the string ending tag '0000'
        pbArDest[piStartPos+iNormalLen] = pbArDest[piStartPos+iNormalLen+1] = (byte)0;    return (iNormalLen+2);
      }public static String bytesToString(byte[] pbArSource,int piStartPos)
       {
        //search for the double zero bytes.
        int iEndPos = -1;
        for(int i = piStartPos;i<pbArSource.length-1;i++)
        {
          if(pbArSource[i] == (byte)0 && pbArSource[i+1] == (byte)0)
          {
            iEndPos = i;
            break;
          }
        }
        if(iEndPos == -1)
          return "";
        String StrTemp = new String(pbArSource,piStartPos,iEndPos - piStartPos);
        return StrTemp;
       }
      

  3.   

    能不能直接改程序,而不再用其它的方法转换呀,如上面的兄弟,
    byte[] b;
    String str = new String(b, "GBK");
    这样会比较简单,但这不行,唉!难道没有其它方法吗?
    再请大虾们指教!!!
      

  4.   

    你接收的时候没有成功显示中文字符
    (即使使用了msgTxt=new String (msgTxt.getBytes("ISO-88591"),"gb2312"也不行)
    那是因为你发送时将String str(假设为你要发送的字串,含中文)转为byte[] strbt时对中文字符的处理出错了。给你一个将含中文字串转为byte[]的CLASS.接收时再使用对应的将byte[]转成String的就行(可能还要使用上面的gb2312转一下);反正我是成功了的
    class BytesToString {
      public static String BytesToStringWay(byte[] source,
        int startPos, int byteLength) {
        if(startPos<0 || byteLength<=0 || source == null
           || source.length < startPos+byteLength-1)return null;    StringBuffer ret= new StringBuffer(byteLength);
        char c=' ';
        int k=0;
        byte b=0;
        for(int i=0;i<byteLength;i++)
        {
          b = source[startPos+i];
          if(b<0) k = 256+b; else k = b;
          c = (char)k;
          ret.append(c);
        }
        //ret.append()
        return ret.toString();
      }
    }
    class StrToByCN {
      public static int StrTobytes(String pStrSource,byte[] pbArDest,int piStartPos) {
        if(piStartPos<0 || pbArDest == null)
          return 0;
        byte[] bArTemp = pStrSource.getBytes();
        int iNormalLen = bArTemp.length;
        if(pbArDest.length < piStartPos+iNormalLen)
          return 0;
        for(int i=0;i<iNormalLen;i++)
          pbArDest[piStartPos+i] = bArTemp[i];
        return (iNormalLen);
      }
    }
      

  5.   

    关于中文问题,
    我想重要的你知道用户给你的是什么编码,
    传输中使用什么编码,
    显示给用户是使用什么编码?
    例如:
    用户gb-->应用程序iso8859-1-->网络传输iso -->应用程序iso-->用户gb如果只是转来转去,看看成功就行了,永远不知道正确的方法。
      

  6.   

    以下经调试可行:
       static void  sendData(){
            try
            {
                String msg=("testit中午");//textField1.getText ();
                if(msg.equals (""))
                    return;
    //            textField1.setText ("");
                InetAddress address=InetAddress.getByName ("10.10.1.37");
    //            int len=msg.length ();
    //            byte[] message=new byte[len];
    //            msg.getBytes(0,len,message,0);
                byte[] message=msg.getBytes();            DatagramPacket packet =new DatagramPacket (message,message.length,address,9999);
                DatagramSocket socket=new DatagramSocket ();
                socket.send (packet);
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }    static void waitForData()
        {
            try{
                byte[] buffer=new byte[1024];
                DatagramPacket packet=new DatagramPacket (buffer,buffer.length );
                DatagramSocket socket=new DatagramSocket (9999);
                while(true)
                {
                    socket.receive(packet);
    //                String s=new String(buffer,0,0,packet.getLength ());
                    String s=new String(buffer,0,packet.getLength());
                    System.out.println("getData:"+(s));
                    packet=new DatagramPacket (buffer,buffer.length);
                }
            }
            catch(Exception e)
            {
            }
       }