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


相关推荐

  • laravel orm

    laravel orm

    2021年10月29日
    46
  • java面试葵花宝典[通俗易懂]

    java面试葵花宝典[通俗易懂]15年毕业到现在也近四年了,最近面试了阿里集团(菜鸟网络,蚂蚁金服),网易,滴滴,点我达,最终收到点我达,网易offer,蚂蚁金服二面挂掉,菜鸟网络一个月了还在流程中,最终有幸去了网易。但是要特别感谢点我达的领导及HR,真的非常非常好,很感谢他们一直的关照和指导。回家后,我对这次面试经历,做了总结,希望对想要跳槽的朋友们有个借鉴。面试整体事项1.简历要准备好,联系方式一定要正确清晰醒目,…

    2022年7月8日
    18
  • qq怎样防盗 qq密码如何防盗[通俗易懂]

    qq怎样防盗 qq密码如何防盗[通俗易懂]1.去腾讯申请密码保护,这样如果密码被激活成功教程或自己忘记了还可以利用密码保护功能取回来。2.QQ密码的位数一定要超过8位,而且最好包含数字、字母和特殊符号,否则以现代计算机的超强计算能力,要想暴力激活成功教程你的QQ密码简直是易如反掌。3.不要在QQ中填入真实的年龄、E-mail等敏感消息,更不能告诉任何人,小心行得万年船。4.不要随意运行别人发给你的文件,即便那些看起来很诱人的…

    2022年7月20日
    11
  • 使用nginx的rewrite实现代理指定文件夹命令方法「建议收藏」

    使用nginx的rewrite实现代理指定文件夹命令方法

    2022年1月24日
    35
  • 她不在

    她不在她不在

    2022年4月23日
    70
  • pytest的assert_java单元测试断言

    pytest的assert_java单元测试断言前言断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了。什么是断言呢?简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试failed

    2022年7月29日
    4

发表回复

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

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