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);
....
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);
....
....
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);
StringReader sr=new StringReader( theString );
try{
sr.read(buff , 0 , theString.length() );
}catch(Exception e){
e.printStackTrace();
}
至少可以保证读出的是unicode字符,而不是什么bytes,试试吧!!
我基本上是你那么写的to RamboAndGates(你的名字好长哦)
但是有个问题啊,DatagramPakcet的构造函数是用BYTE[]做参数构造的,而不是用CHAR[].
public static void main(String[] args){
String str="你好吗?";
byte[] buff=str.getBytes();
System.out.println(buff.length);//显示为 8
System.out.println(new String(buff));//显示“你好吗?”
}
}
位数的减少只有可能在charset转换时才会出现。
对啊,我在调试的时候写的代码跟你一样,但就不知道传输的时候出了什么错?
你能把EMAIL留给我码,我把整个文件发给你,你运行看看?谢谢
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()方法。