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


相关推荐

  • linux怎么配置tomcat的端口,linux下安装tomcat及iptables开放端口

    linux怎么配置tomcat的端口,linux下安装tomcat及iptables开放端口在Linux运行Tomcat之前必须安装jdk,并配置环境变量。以下是Tomcat的安装配置:1.下载安装包解压以tomcat7为例,https://tomcat.apache.org/download-70.cgi,下载apache-tomcat-7.0.88.tar.gz即可可在/usr下建以tomcat目录,将安装包解压在此目录下即可tar-zxv-fapache-tomcat-7.0…

    2022年5月15日
    35
  • 五大优秀的数据库设计工具[通俗易懂]

    五大优秀的数据库设计工具[通俗易懂]数据库的设计主要是针对一个特定的个环境,为了能够满足有效的数据存储和处理等要求,需要构造最优的数据库模式来建立数据库及其对应系统。数据库设计时根据用户的需求,在特定的数据库管理系统上设计和建立数据库的过程,是软件系统开发过程中的关键技术之一。在数据库领域内,通常把使用数据库的各类系统统称为数据库应用系统。数据库设计的目的是把软件系统中大量的数据按一定的模型组织起来,以实现方便、及时地存储、维护和检索等功能,是软件系统开发和建设的关键和重要组成部分之一,因此数据库设计往往比较复杂,最佳设计不可能一蹴而就,需

    2022年7月27日
    10
  • Java的定时器_JAVA定时任务

    Java的定时器_JAVA定时任务总结一下我使用过的4种类型的定时器:@Scheduled注解、quartz、newTimer().schedule、使用线程控制。1.@Scheduled注解@Scheduled注解是最简单的方式,只需要启用定时器,在方法上添加注解即可。在spring配置中加入:<!–启用注解定时器–> <task:annotation-driven/>…

    2022年9月16日
    3
  • vue子组件调用父组件函数_vue子组件修改父组件值

    vue子组件调用父组件函数_vue子组件修改父组件值vue子组件调用父组件的3种方法

    2022年10月2日
    3
  • cegui基础

    cegui基础cegui基础2010年11月12日  cegui渲染入门:  至少需要3步,才可以使cegui运行起来  1创建CEGUI::Renderer对象  2创建CEGUI::System对象  3调用渲染函数  ofcourse,实现真正的游戏GUI,你还需要装载相关的数据文件,进行一些最基础的初始话,你也需要处理用户输入。  1创建CEGUI:Re…

    2022年7月24日
    8
  • linux socket udp编程_linux网络编程socket

    linux socket udp编程_linux网络编程socket浅谈UDP。UDP是一种不可靠的、无连接的、数据报服务。发送端应用程序每执行一次写操作,UDP模块就将其封装成一个UDP数据报发送。接收端必须及时针对每一个UDP数据报执行读操作,否则就会丢包。并且,如果用户没有指定足够的应用程序缓冲区来读取UDP数据,则UDP数据将被截断。因此,采用UDP协议时必须要求接收端可以一次性收取完发送端一次发送的数据,不然就会造成数据丢失。2.客户端3.输出结果UDP是一种无连接的传输方式,所以可以多个客户端同时发送。服务器端关闭立马重启,客户

    2022年9月8日
    1

发表回复

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

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