java socket通讯中文乱码问题

java socket通讯中文乱码问题话不多说上代码publicvoidrun(){//客户端一连接就可以写数据给服务器了newsendMessThread().start();super.run();try{//读Sock里面的数据InputStreams=socket.getInputStream();byte[]buf=newbyte[1024];

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

话不多说上代码

 public void run() { 
   
        //客户端一连接就可以写数据给服务器了
        new sendMessThread().start();
        super.run();
        try { 
   
            // 读Sock里面的数据
            InputStream s = socket.getInputStream();
            byte[] buf = new byte[1024];
            int len = 0;
            while ((len = s.read(buf)) != -1) { 
   
                System.out.println(getdate() + " 服务器说: "+new String(buf, 0, len,"UTF-8"));
            }
        } catch (IOException e) { 
   
            e.printStackTrace();
        }
    }

可以很明显的看到,我在进行读服务器发送的信息时,我的编码集为UTF-8,直接将UTF-8改为GBK

 public void run() { 
   
        //客户端一连接就可以写数据给服务器了
        new sendMessThread().start();
        super.run();
        try { 
   
            // 读Sock里面的数据
            InputStream s = socket.getInputStream();
            byte[] buf = new byte[1024];
            int len = 0;
            while ((len = s.read(buf)) != -1) { 
   
                System.out.println(getdate() + " 服务器说: "+new String(buf, 0, len,"GBK"));
            }
        } catch (IOException e) { 
   
            e.printStackTrace();
        }
    }

接下来是写的操作同等原理


            super.run();
            //写操作

            Scanner scanner=null;
            OutputStream os= null;
            try { 
   
                scanner=new Scanner(System.in);
                os= socket.getOutputStream();
                String in="";
                do { 
   
                    in=scanner.next();
                    os.write((""+in).getBytes("GBK"));
                    os.flush();
                } while (!in.equals("bye"));
            } catch (IOException e) { 
   
                e.printStackTrace();
            }
            scanner.close();
            try { 
   
                os.close();
            } catch (IOException e) { 
   
                e.printStackTrace();
            }
        }

至于为什么这么写是因为网上发现有帖子说:“在服务端默认的编码情况下,JAVA的SOCKET接收需要GBK编码,而C#的接收需要UTF-8编码

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158340.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 用Redis客户端工具连接Redis

    用Redis客户端工具连接Redis进入redis安装目录viredis.conf1.关闭默认的只允许本地登录2.关掉保护模式3.requirepass注释去掉,修改密码4.开启redis后台运行5.安装redis客户端连接工具6.确保Linux防火墙已经关闭,再连接redissystemctlstopfirewalld.servicesystemctldisablefirewalld.service7.连接redis成功……

    2022年9月19日
    2
  • virsh强制关闭虚拟机_kvm创建虚拟机

    virsh强制关闭虚拟机_kvm创建虚拟机virsh可以通过reboot、shutdown来重启或关闭对应的虚拟机。由于其原理是host通过发送acpi指令来控制虚拟机的电源,如果guest系统没有安装acpi服务器或该服务器没有启动,那么虚拟机将不会重启或关闭,那么只有使用destroy来强制关闭。安装acpid服务centos系统yuminstallacpidubuntu系统apt-getinstallacp…

    2022年8月11日
    7
  • shell训练营 Day6「建议收藏」

    shell训练营 Day6「建议收藏」shell训练营 Day6

    2022年4月21日
    45
  • 软件公司名单库

    软件公司名单库软件公司名单

    2022年8月24日
    33
  • 临时重定向和永久重定向的状态码_java重定向怎么写

    临时重定向和永久重定向的状态码_java重定向怎么写重定向重定向分为永久重定向和临时重定向,在页面上体现的操作就是浏览器会从一个页面自动跳转到另外一个页面。比如用户访问了一个需要权限的页面,但是该用户当前并没有登录,因此我们应该给他重定向到登录页面。

    2022年7月29日
    11
  • mm理论怎么通俗理解_通俗易懂的理解三观

    mm理论怎么通俗理解_通俗易懂的理解三观讲这个之前,先讲一下什么叫对称加密,什么叫非对称加密:通俗理解:对称加密,一个盒子,两把钥匙,两把钥匙都可以锁和开锁。非对称加密,一个盒子,一个私人钥匙,很多公共的钥匙。两种情况:1,私人的钥匙能锁能开锁,公共的钥匙,只能开锁,不能上锁2,私人的钥匙能锁能开锁,公共的钥匙,只能上锁,不能开锁改革春风吹进家,江南贸易遍开花。随着改革开放的推进,小K家里的生意也越做越好,正洽迎上互联网的…

    2022年10月2日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号