发送端:
public class UDPSend {
public static void main(String[] args) throws IOException {
DatagramSocket ds =new DatagramSocket();
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));//输入数据
String line=null;
while((line=br.readLine())!=null)
{
if("886".equals(line))
{
break;
}
byte[] b=line.getBytes();
DatagramPacket dp=new DatagramPacket
(b,b.length,InetAddress.getByName("192.168.252.1"),3303);
ds.send(dp);
}
ds.close();
}
}
接收端:
public class UPDReceive {
public static void main(String[] args) throws IOException {
DatagramSocket ds=new DatagramSocket(3303);
while(true)
{
byte[] b=new byte[1024];
DatagramPacket dp=new DatagramPacket(b,b.length);
ds.receive(dp);
String ip=dp.getAddress().getHostAddress();
String s=new String(dp.getData(),0,dp.getLength(),"UTF-8");
System.out.println("ip:"+ip+",字符串:"+s);
}
}
}
结果我在发送端输入"你好“,接收端的结果是:ip:192.168.252.1,字符串:浣犲ソ
字符串的内容并没有转码。我这个项目的Text file encoding属性也设置成UTF-8了
为什么结果没有转码呢?
发送端用的编码是系统默认的编码file.encoding属性对应的编码,而不是UTF-8,所以接收端用UTF-8转换时输出的是乱码。
修正UDPSend端代码,两端统一用同一个: byte[] b = line.getBytes("UTF-8");
还是统一设置下比较好,你可以看下getBytes源码,跟踪下默认使用的编码到底是哪个,可以肯定不是UTF-8的。因为你不能保证最终项目所在环境的编码一定就是UTF-8,你本机就是一个例子。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。