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


相关推荐

  • 百度分享到qq空间失败

    百度分享到qq空间失败

    2021年9月19日
    49
  • ADRC学习笔记(二)

    ADRC学习笔记(二)1.最速跟踪微分器TD它的离散表达式为:参数中:V(t)是目标值h、h0为积分步长,一般来说h可以等于h0,但是为了减少超调和减少震荡,才把他们分开,一般h0比h大,比如大20倍。当h0较大时,能够明显减少震荡,所以也叫滤波因子。减小h可以抑制噪声放大作用。r为速度因子,值越大,逼近速度越快,但是最好根据实际被控对象的可承受能力而定。表达式中:其中fhan函数第一种表达式为:fhan函…

    2022年5月12日
    40
  • Node.JS 删除数组元素

    Node.JS 删除数组元素//数组数据varvalArray=[2,2,2,3,4,5,2,6,7];//删除的值vardelVal=2;//删除元素for(vari=0;i<valArray.length;i++){//数据比对if(valArray[i]==delVal){//删除值valArray.splice(i,1);//下标递减i–;}}//输出日志console.log(.

    2025年6月15日
    7
  • 用ccproxy + stunnel做个加密代理「建议收藏」

    用ccproxy + stunnel做个加密代理「建议收藏」https://www.stunnel.org/downloads.htmlccproxy+stunnel做个加密http代理和socks5代理目前国内用户无法访问某些国外网站,如http://

    2022年7月3日
    59
  • 笔记17-Map「建议收藏」

    笔记17-Map「建议收藏」1.Map集合1.1Map集合概述和特点【理解】Map集合概述interfaceMap<K,V>K:键的类型;V:值的类型Map集合的特点键值对映射关系一个键对应一个值键不能重复,值可以重复元素存取无序Map集合的基本使用publicclassMapDemo01{publicstaticvoidmain(String[]args){//创建集合对象Map<String,String&g

    2025年10月3日
    4
  • 一文搞懂SpringBoot自动配置原理「建议收藏」

    一文搞懂SpringBoot自动配置原理「建议收藏」阅读收获????????理解SpringBoot自动配置原理一、SpringBoot是什么SpringBoot的诞生就是为了简化Spring中繁琐的XML配置,其本质依然还是Spring框架,使用SpringBoot之后可以不使用任何XML配置来启动一个服务,使得我们在使用微服务架构时可以更加快速的建立一个应用。简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式。二、SpringBoot的特点提供了固定的配置来简化配置,即约定大于配置 尽可能地

    2022年8月21日
    8

发表回复

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

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