o,好的
it's something like it:
Client:
....
char[] buff=str.getBytes(enc);
DatagramPacket pack=new DatagramPakcet(buff);
....Server:
....
DatagramPacket pack=new DatagramPakcet();
sock_serv.receive(pack);
char[] buff=pack.getData();
String str=new String(buff);
....

解决方案 »

  1.   

    Client:
    ....
    String enc = "GB2312";
    byte[] buff=str.getBytes(enc);
    DatagramPacket pack=new DatagramPakcet(buff);
    ....Server:
    ....
    DatagramPacket pack=new DatagramPakcet();
    sock_serv.receive(pack);
    byte[] buff=pack.getData();
    String enc = "GB2312";
    String str=new String(buff,env);
      

  2.   

    我觉得这句char[] buff=str.getBytes(enc);有问题,不知道这样行不行:
    StringReader sr=new StringReader( theString );
    try{
        sr.read(buff , 0 , theString.length() );
    }catch(Exception e){
        e.printStackTrace();
    }
    至少可以保证读出的是unicode字符,而不是什么bytes,试试吧!!
      

  3.   

    老兄,该不会连这都不清楚吧!byte顾名思义8 bits,char在Java中使用16 bits 表示,用来支持Unicode
      

  4.   

    to masterz:
    我基本上是你那么写的to RamboAndGates(你的名字好长哦)
    但是有个问题啊,DatagramPakcet的构造函数是用BYTE[]做参数构造的,而不是用CHAR[].
      

  5.   

    对呀,我一时忘记了。下面这段代码我试了试,不会出现字符串缩水的现象,你看看行不行。import java.io.*;public class StringToBytes{
        public static void main(String[] args){
            String str="你好吗?";        
            byte[] buff=str.getBytes();        
            System.out.println(buff.length);//显示为 8
            System.out.println(new String(buff));//显示“你好吗?”
        }
    }
      

  6.   

    不管char是多少位,getbyte之后的bytes大小已经固定了,传输之后也不会少啊。
    位数的减少只有可能在charset转换时才会出现。
      

  7.   

    to RamboAndGates:
    对啊,我在调试的时候写的代码跟你一样,但就不知道传输的时候出了什么错?
    你能把EMAIL留给我码,我把整个文件发给你,你运行看看?谢谢
      

  8.   

    ok,请发到[email protected]    UDP的程序我也做过啊,可是没有遇到过你说的情况。
      

  9.   

    一般这样做应该没问题啊:客户端:(逻辑上的)
    import java.net.*;public class ClientData{
        public static void main(String[] args){
            DatagramSocket ds=null;
            byte[] buffer = new byte[1000];
            DatagramPacket dp = new DatagramPacket( buffer , buffer.length );
            try{
                ds=new DatagramSocket( 8081 );
            }catch(Exception e){
                e.printStackTrace();
            }
            while(true){
                try{
                String hi=new String("嗨,你听到了吗?");
                DatagramPacket resDp=new DatagramPacket(hi.getBytes(),hi.getBytes().length,InetAddress.getByName(null),8080);
                ds.send(resDp);
                ds.receive(dp);
                System.out.println(new String(dp.getData()).trim());            
                Thread.sleep(1000);
                }catch(Exception e){                
                    e.printStackTrace();
                    break;
                }
            }
        }
    }服务器端:
    import java.net.*;public class ServerData{
        public static void main(String[] args){
            DatagramSocket ds=null;
            byte[] buffer = new byte[1000];
            DatagramPacket dp = new DatagramPacket( buffer , buffer.length );
            try{
                ds=new DatagramSocket( 8080 );
            }catch(Exception e){
                e.printStackTrace();
            }
            while(true){
                try{
                ds.receive(dp);
                System.out.println(new String(dp.getData()).trim());            
                String hi=new String("ok,你可以disconnect了");
                DatagramPacket resDp=new DatagramPacket(hi.getBytes(),hi.getBytes().length+2,dp.getAddress(),dp.getPort());
                ds.send(resDp);
                Thread.sleep(1000);
                }catch(Exception e){                
                    e.printStackTrace();
                    break;
                }
            }
        }
    }
    你试试,在我这里没问题,直接就可以编译运行,先启动Server那端的,然后再启动Client的比较好,在接收包之后我对字符串使用了trim()方法。