MFC Java 使用socket 中文乱码解决方法(一)「建议收藏」

MFC Java 使用socket 中文乱码解决方法(一)「建议收藏」MFCJava使用socket中文乱码解决方法(一)1、在使用MFC做服务端,Java做客户端时(1)客户端向服务端发送数据 Java发送代码:PrintWriterprintWriter= newPrintWriter( newBufferedWriter( newOutputStreamWriter( client.getOutputStream(),”gbk”)),true); //Windows一般默认为GB

大家好,又见面了,我是你们的朋友全栈君。

MFC Java 使用socket 中文乱码解决方法(一)

1、在使用MFC做服务端,Java做客户端时

(1)客户端向服务端发送数据

	Java发送代码:
PrintWriter printWriter = 
						new PrintWriter(
						new BufferedWriter(
						new OutputStreamWriter(
						client.getOutputStream(), "gbk")),true);
						//Windows一般默认为GBK编码,故转换为gbk编码,也可以使用gb18030等编码
						//Unicode会出现乱码!!!!!!!!!!!!!
        printWriter.print(msg);
        printWriter.flush();
        //printWriter.close();

MFC接收代码

char strRecive[512];//数组大小可以是发送数据的类型自由改变
	ZeroMemory(strRecive, sizeof(strRecive));//清空字符串数组,避免产生乱码
	int num = Receive(strRecive, sizeof(strRecive));//接收客户端发送的数据

	CString tem = (CString)strRecive;//转换为CString

(2)服务端向客户端发送数据

MFC发送代码

//将数据转换为utf-8形式
int strSize = WideCharToMultiByte(CP_UTF8, 0, SendMsg, -1, NULL, 0, NULL, FALSE);//获取待发送数据的长度
	char *str = new char[strSize + 1];//数组长度要比数据长度大1,用于存放'\0'
	memset(str, 0, strSize + 1);
	WideCharToMultiByte(CP_UTF8, 0, SendMsg, -1, str, strSize, NULL, FALSE);
	str[strSize] = '\0';
//发送数据
if (SOCKET_ERROR == sendSocket->Send(str, strlen(str), 0))
{ 
   
	CString str;
	str.Format(L"发送失败,错误代号:%d", GetLastError());
	MessageBox(str);
	return;
}
else
{ 
   
sendSocket->Close();
}
int len = SendMsg

Java接收代码

//有多种方法可用于接收数据
reader=new BufferedReader(new InputStreamReader(client.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) { 
   
            System.out.println(line);
        }

       /* BufferedInputStream in = new BufferedInputStream(client.getInputStream()); byte[] bytes = new byte[1024]; int len; String sb=null; while ((len = in.read(bytes)) != -1) { //注意指定编码格式,发送方和接收方一定要统一,建议使用UTF-8 sb=new String(bytes,"UTF-8"); } System.out.println("get message from client: " + sb); in.close();*/

/* Reader reader =new InputStreamReader(client.getInputStream()); char chars[]=new char[121231]; int len; StringBuilder sb =new StringBuilder(); while((len=reader.read(chars)) != -1) { sb.append(new String(chars,0, len)); } System.out.println("from client: "+ sb);*/

总结

解决好编码转换问题就ok了

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

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

(0)
上一篇 2022年7月14日 上午10:36
下一篇 2022年7月14日 上午10:46


相关推荐

  • SpringBoot 自动配置原理(超级无敌详细)-1[通俗易懂]

    SpringBoot 自动配置原理(超级无敌详细)-1[通俗易懂]我们用Springboot很方便的能将一个框架给搭建起来,是因为它将以前我们需要手动配置的地方都利用自动配置来代替,利用约定大于配置的思想简化了我们开发工作量

    2022年8月20日
    6
  • PotPlayer+SVP4视频补帧简易教程

    PotPlayer+SVP4视频补帧简易教程这两天突然想到之前看到过视频补帧的测试,印象中效果挺好。昨天试了试,也找过很多找教程,搜集了一些经验,这里先讲解一种特别简单的方法,再说一种不太简单但也很容易上手的方法(这个才是重点!!!)。要用到的软件:Potplayer–依照你系統位数(现在基本都是64位的),不清楚就裝32bitSVP4Free-依照Potplayer安裝版本進行安裝接下来是安装:1.Potpla…

    2022年7月12日
    30
  • 【生信】全基因组关联分析(GWAS)原理

    【生信】全基因组关联分析(GWAS)原理生信 全基因组关联分析 GWAS 1 前提知识介绍 1 1 最小二乘法 1 2GWAS 的数学原理 1 3Hardy Weinberg 定律 amp 卡方检验 1 4 连锁不平衡 1 5 曼哈顿图 1 6 箱式图 Box plot1 7plot2 GWAS 的定义 2 1 几个需要知道的概念 2 2 全基因组关联分析 3 GWAS 数据预处理 3 1 质控的原因 3 2 基因型数据的质控 3 4 表型数据质控 3 5 正负链翻转 3 6 基因型填补 3 7 群体分层校

    2026年3月17日
    1
  • 免费云空间支持ftp/asp/php/cgi/mysql/_国外三款免费php asp mysql ftp免费全能空间/绑定域名…

    免费云空间支持ftp/asp/php/cgi/mysql/_国外三款免费php asp mysql ftp免费全能空间/绑定域名…帝国空间网免费 2g asp 教程 php 教程 mysql 教程 ftp 可绑米 免备案空间免费虚拟主机 free 型号 免费 2g 全能空间 免备案 free 现价 0 元 月原价 50 元 月内容 windows2003r iis6 中国军区双线机房 无需备案 国内独家 支持 2 个域名绑定 2g 网页空间 赠送 100mmysql 数据库教程空间 支持网页特效 vbsript 客户端脚本 支持 asp php

    2026年3月26日
    2
  • json_decode遇到的编码问题

    json_decode遇到的编码问题

    2021年11月5日
    47
  • c语言字符数组的初始化的三种方式_字符数组用16进制初始化

    c语言字符数组的初始化的三种方式_字符数组用16进制初始化1、字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。charstr[10]={‘I’,”,’a’,’m’,”,‘h’,’a’,’p’,’p’,’y’};即把10个字符分别赋给str[0]到str[9]10个元素如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空

    2022年10月8日
    6

发表回复

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

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