System.out.println("Start server...");
   DatagramSocket s=new DatagramSocket(3030);
   byte[] data=new byte[100];
   DatagramPacket dgp=new DatagramPacket(data, data.length);
            
   while(true){
      s.receive(dgp);      System.out.println(new String(data).trim());
      System.out.println("Receive Data");      s.send(dgp);
   }以上是我的udp协议的接收代码,但现在收到的数据显示都是乱码。有可能是跟数据的偏移量有关,DatagramPacket还有一个接口是带offset参数的,但不知道怎么用。另外还有什么原因会出乱码吗?
请高手指教一下,解决问题立即给分

解决方案 »

  1.   

    是不是你的字符集有问题
    System.out.println(new String(data,"gb2312").trim());
      

  2.   

    好像不是这个原因,用了这个也不行。
    显示的乱码如下:
    $JJDcG$!
    请帮忙一下,各位!
      

  3.   

    System.out.println(new String(dgp.getData(),"gb2312").trim());
      

  4.   

    问题应该找到了,发送的数据都是16进制的,请问一下,java里面的char型长度是多少,是不是数据被截断了,这样的情况我应该怎么做呢?还能用
    byte[] data=new byte[100];
       DatagramPacket dgp=new DatagramPacket(data, data.length);
    这个接口吗?还是换成别的什么办法接收?
    不好意思,没怎么用过JAVA。
      

  5.   

    你用char吧,如果我没有记错,char应该是16
      

  6.   

    http://www.boxigroup.com B/S、C/S、数据库开发帮助网站、欢迎光临
      

  7.   

    应该没有问题的,可能是你的客户端的发送有问题,我测试了一下,以下是测试代码,我运行过的,没有乱码,你参考一下:
    //DGSServer.java
    package com.fun;
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;public class DGSServer {
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    try{
    System.out.println("Start server...");
    DatagramSocket s=new DatagramSocket(10000);
    byte[] data=new byte[100];
    DatagramPacket dgp=new DatagramPacket(data,data.length);
    while(true){
    s.receive(dgp);
    System.out.println(new String(data).trim());
    s.send(dgp);
    }
    }
    catch(IOException e){
    System.out.println(e.toString());
    }
    }
    }
    //DGSClient.java
    package com.fun;
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;public class DGSClient {
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    String host="localhost";
    DatagramSocket s=null;
    try {
    s=new DatagramSocket();
    byte[] buffer=new String("Send me a datagram").getBytes();
    InetAddress ia=InetAddress.getByName(host);
    DatagramPacket dgp=new DatagramPacket(buffer,buffer.length,ia,10000);
    s.send(dgp);

    byte [] buffer2 = new byte [100];
    dgp=new DatagramPacket(buffer2,buffer2.length,ia,10000);
    s.receive(dgp);
    System.out.println(new String(dgp.getData()));
    }
    catch (IOException e) {
    // TODO: handle exception
    System.out.println(e.toString());
    }
    finally{
    if(s!=null)
    s.close();
    }
    }}
      

  8.   

    你在客户端把char型转为byte数组,应该没问题。
    char是2个字节的。