直接看代码:
接收端:
DatagramSocket ds=new DatagramSocket(9999);
byte[] by=new byte[100]; 
DatagramPacket dp=new DatagramPacket(by,by.length);
ds.receive(dp);
System.out.println(new String(by).trim());
ds.close();发送端: DatagramSocket ds=new DatagramSocket();
String str="今天星期一";
DatagramPacket dp=new DatagramPacket(str.getBytes(),str.length(),
InetAddress.getByName("127.0.0.1"),9999);
ds.send(dp);
ds.close();接收结果:
              今天?
     

解决方案 »

  1.   

    楼主 你的问题一定是字符集编码问题了,这个问题也一直苦恼着我 对于你的代码在此基础上 我没能解决 
    但是使用我经常写的代码 在你的基础上能够得出正确结果 
    楼主可以测试一下:import java.io.ByteArrayOutputStream;
    import java.io.DataOutputStream;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    public class UDPClinet { public static void main(String[] args)throws Exception {
    String str="今天星期一";
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    DataOutputStream dos = new DataOutputStream(baos);
    //dos.writeBytes(str);
    dos.writeUTF(str);
    byte[] buf = baos.toByteArray();
    DatagramSocket ds=new DatagramSocket(); 
     
    DatagramPacket dp=new DatagramPacket(buf,buf.length, 
    InetAddress.getByName("127.0.0.1"),9999); 
    ds.send(dp); 
    ds.close();  }}import java.io.ByteArrayInputStream;
    import java.io.DataInputStream;
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;
    public class UDPServer {
    public static void main(String[] args) {
    DatagramSocket ds;
    try {
    ds = new DatagramSocket(9999);
    byte[] by=new byte[100]; 
    DatagramPacket dp=new DatagramPacket(by,by.length); 
    ds.receive(dp); 
    ByteArrayInputStream bais = new ByteArrayInputStream(by);
    DataInputStream dis = new DataInputStream(bais);
    System.out.println(dis.readUTF());
    //System.out.println(new String(by).trim()); 
    ds.close(); 
    } catch (SocketException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();


    }}能力有限 不能深层次解答字符集编码的问题 如果有高手 希望给予指点! 万分感谢
      

  2.   

    str.getBytes():使用平台默认的字符集将此 String 解码为字节序列,并将结果存储到一个新的字节数组中。
    一般会编码成GBK的,JAVA默认使用UTF-8的编码,所以取出来是乱码了。
    发送的时候:str.getBytes("utf-8");
    接收的时候:new String(str.getBytes(),"utf-8");
    这样估计就没有问题了 
      

  3.   

    回:haxzheng 您说的没错 我测试了 能得到正确结果 不过 从发送 到接收数据 请高手把流程解释一下可以么 中间都经过什么样子的编码过程.
      

  4.   

    DatagramPacket dp=new DatagramPacket(str.getBytes(),str.length(), 
    InetAddress.getByName("127.0.0.1"),9999); 
    换成:
    DatagramPacket dp=new DatagramPacket(str.getBytes(),str.getBytes.length, 
    InetAddress.getByName("127.0.0.1"),9999); 
    就可以得到正确结果了拉!
    你的长度不对啊!