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,用于存放'
//将数据转换为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
'
memset(str, 0, strSize + 1); WideCharToMultiByte(CP_UTF8, 0, SendMsg, -1, str, strSize, NULL, FALSE); str[strSize] = '
//将数据转换为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
'
; //发送数据 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了

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 如何利用python读excel数据_python在excel应用实例

    如何利用python读excel数据_python在excel应用实例文章目录python读取excel表数据的方法:完整的程序代码python读取excel表数据的方法:首先安装Excel读取数据的库xlrd;然后获取Excel文件的位置并且读取进来;接着读取指定的行和列的内容,并将内容存储在列表中;最后运行程序即可。python读取excel表数据的方法:安装Excel读取数据的库—–xlrd直接pipinstallxlrd安装xlrd库#引入Excel库的xlrdimportxlrd获取Excel文件的位置并且读取进来#导入需要读取Exc

  • NAT MASQUERADE

    NAT MASQUERADESNAT是sourcenetworkaddresstranslation的缩写即源地址目标转换比如,多个PC机使用ADSL路由器共享上网,每个PC机都配置了内网IP。PC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip。当外部网络的服务器比如网站web服务器接到访问请求的时候,他的日志记录下来的是路由器的ip地址,而不是pc机的内网ip。这是因为,这个服务器收到的数…

  • 创建一个欢迎 cookie 利用用户在提示框中输入的数据创建一个 JavaScript Cookie,当该用户再次访问该页面时,根据 cookie 中的信息发出欢迎信息。…

    创建一个欢迎 cookie 利用用户在提示框中输入的数据创建一个 JavaScript Cookie,当该用户再次访问该页面时,根据 cookie 中的信息发出欢迎信息。…

    2021年10月30日
  • java 0xff00_& 0xFF 与 & 0xFF00 的作用

    java 0xff00_& 0xFF 与 & 0xFF00 的作用c[i]=(char)(b[i]&0xff)(b[i]为byte型,c[i]为char型)觉得与一下0xff没什么用。直接c[i]=(char)b[i]有何异?如:((WORD)((((WORD)(wData)>>8)&0xff)|(((WORD)(wData)<<8)&0xff00)))charc=(ch…

  • mybatis实现原理,动态代理_jdk动态代理实现原理

    mybatis实现原理,动态代理_jdk动态代理实现原理前言一直以来都在使用MyBatis做持久化框架,也知道当我们定义XXXMapper接口类并利用它来做CRUD操作时,Mybatis是利用了动态代理的技术帮我们生成代理类。那么动态代理内部的实现细节到底是怎么的呀?XXXMapper.java类和XXXMapper.xml到底是如何关联起来的呀?本篇文章就来详细剖析下MyBatis的动态代理的具体实现机制。MyBatis的核心组件及应用在详细探究MyBatis中动态代理机制之前,先来补充一下基础知识,认识一下MyBatis的核心组件。SqlSessio

  • java snmp walk_snmpwalk用法

    java snmp walk_snmpwalk用法snmpwalk语法:snmpwalk交换机或路由器IP地址-cSNMP读密码-v1或2(代表SNMP版本)OID(对象标示符)用法举例:1、snmpwalk-cpublic-v1-mALL192.168.30.49.1.3.6.1.2.1.25.1得到取得windows端的系统进程用户数等2、snmpwalk-cpublic-v1-mALL192…

发表回复

您的电子邮箱地址不会被公开。

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