UDP中文接收出现乱码问题结局

今天重新温故UDP的时候出了一个小BUG,中文传输后收到的是乱码想了一下,其实是中文字符与英文字符所占字节问题。

上代码:

客户端代码:

public class ScoketSend {  
    public static void main(String[] args) throws Exception {  
        Scanner sc = new Scanner(System.in);  
        DatagramSocket datagramSocket = new DatagramSocket();  
        //方便一直发送数据,最好做一个判断使得datagramSocket关闭,在这就不加了。  
        while(true){  
            String line = sc.nextLine();  
            DatagramPacket datagramPacket = new DatagramPacket(line.getBytes(), line.length(), InetAddress.getByName("127.0.0.1"), 6666);  
            datagramSocket.send(datagramPacket);  
        }  
    }  
}  
服务端代码:

public class SocketReciver {  
    public static void main(String[] args) throws Exception {  
        DatagramSocket datagramSocket = new DatagramSocket(6666);  
        //方便一直接受数据,同样最好做一个判断使得dataSocket关闭,可以是客户端传一个"quit"字符串来判断关闭   
 	while(true){  
            DatagramPacket datagramPacket = new DatagramPacket(new byte[1024], 1024);  
            datagramSocket.receive(datagramPacket);  
            byte[] arr = datagramPacket.getData();  
            int len = datagramPacket.getLength();  
            System.out.println(new String(arr,0,len));  
        }  
    }  
}  

通过dos窗口看结果更为直观:


服务端接收:


很明显加了中文的字符串不全,赶紧找原因,肯定是接收的字节不对,要从客户端找原因,果然原因找到了。

在将字符串放入packet的时候,我给的是字符串的长度,用字节流传输应该是给字节数组大小。

错误代码:

new DatagramPacket(line.getBytes(), line.length(), InetAddress.getByName("127.0.0.1"), 6666);  
修改后的代码:
new DatagramPacket(line.getBytes(), line.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
果然修改完后就一切正常了(附上接收正常后的服务端图片):

总结:好了,问题解决了皆大欢喜。
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值