java udp发送接收DatagramPacket过程为什么传汉字会丢失一部分

lengxingxing_ 2017-01-16 09:52:42
import java.net.*;
import java.io.*;

public class UDPClient
{
public static void main(String[] args) throws Exception{
DatagramSocket ds=new DatagramSocket(6000);
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String line=null;
while((line=br.readLine())!=null){
DatagramPacket dp=new DatagramPacket(line.getBytes(),0,line.length(),InetAddress.getByName("localhost"),8000);
ds.send(dp);
}
br.close();
ds.close();
}
}



import java.net.*;
import java.io.*;

public class UDPServer
{
public static void main(String[] args) throws Exception{
DatagramSocket ds=new DatagramSocket(8000);
byte[] buff=new byte[1024];
DatagramPacket dp=new DatagramPacket(buff,1024);
while(true){
ds.receive(dp);
String str=new String(dp.getData(),0,dp.getLength());
System.out.println(str);
}

}
}



这里简单举了一个例子,可能有漏洞,主要问题是当发送中文数据的时候,例如“你好”,对端只能接收到一半的中文,例如“你”,发送英文数据全部可以接收,为什么会丢失后面一半的汉字?我考虑可能是编码问题?可终究还是不知道怎么回事,
求大神帮忙~~
...全文
295 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
为啥我改成getBytes().length以后会报异常,说是参数非法类型,定位在InetAddress.getByName()这里,然后我换长度试,发现长度大于133的全部会报异常,求解
刘大神仙 2017-01-17
  • 打赏
  • 举报
回复 3
尽量都有字节流。 你上面的代码,出错的原因是,客户端传过去的是字符的长度,你改成字节的长度就可以了。 DatagramPacket dp=new DatagramPacket(line.getBytes(),0,line.getBytes().length,InetAddress.getByName("localhost"),8000);
刘大神仙 2017-01-17
  • 打赏
  • 举报
回复
不要用字符流,用字节流,

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧