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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 项目开发中编写的文档

    软件开发中文档的编写是一个不可缺少的环节,常见的如《需求分析》、《概要分析》、《数据库设计》等。在“软件人”的阵营里向来存在两种观点,注重文档还是关心代码。一直争论多少年了,好像都没有一个真正的定乱。

    2021年12月21日
    36
  • C++对象数组「建议收藏」

    C++对象数组「建议收藏」C++对象数组一、对象数组1.C++对象数组的定义:类名数组名[元素个数]例:Studentstu[10];2.对象数组访问形式:数组名[下标].成员名;例:stu[i].print();3.对象数组的初始化:对象数组的初始化通常也是由构造函数来完成的例:关于对象数组的几点说明:  (1)在建立对象数组的时候需要调用构造函数。如果对象数组有100个元素,就需…

    2022年7月12日
    16
  • 常用数据库端口号总结

    关系型数据库:1.Oracle数据库默认端口号为,1521;2.MySQL数据库默认端口号为,3306;3.SQLServer数据库默认端口号为,1433;4.postgreSQL数据库默认端口号为,5432;NOSQL数据库:1.MongoDB默认端口号为:27017;2.Redis默认端口号为:6379;3.memcached默认端口号为:11211;…

    2022年4月6日
    121
  • maven阿里云仓库配置_阿里docker仓库

    maven阿里云仓库配置_阿里docker仓库maven仓库1、阿里云maven仓库https://mvnrepository.com/artifact/com.aliyun2、仓库配置第一步:修改maven根目录下的conf文件夹中的setting.xml文件,内容如下:<mirrors><mirror><id>alimaven</id>&lt…

    2022年10月31日
    0
  • HTMLTestRunner源码

    HTMLTestRunner源码#-*-coding:utf-8-*-“””ATestRunnerforusewiththePythonunittestingframework.ItgeneratesaHTMLreporttoshowtheresultataglance.Thesimplestwaytousethisistoinvokeitsmain…

    2022年10月28日
    0
  • docker的四种网络模式_网络模式11b/g/n什么意思

    docker的四种网络模式_网络模式11b/g/n什么意思Docker网络模式详解

    2025年6月12日
    0

发表回复

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

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