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了

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

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

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

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

(0)


相关推荐

  • 用WriteProcessMemory函数注入进程的流程

    用WriteProcessMemory函数注入进程的流程
    CreateProcessA    创建挂起进程
    GetThreadContext
    ReadProcessMemory
    VirtualAllocEx      分配空间 
    WriteProcessMemory写入PE头
    WriteProcessMemory循环写入各节表
    WriteProcessMemory
    SetThreadContex

  • 属于iscsi使用的命令_tempadm

    属于iscsi使用的命令_tempadm[root@xifenfei~]#fdisk-lDisk/dev/sda:21.4GB,21474836480bytes255heads,63sectors/track,2610cylindersUnits=cylindersof16065*512=8225280bytesDeviceBootStartEndB…

  • curl源码编译安装

    curl源码编译安装平台:Ubuntu20方法一:apt-get使用内置的apt下载工具进行安装,sudoapt-getinstallcurl方法二:从官网下载压缩包在官网可以找到curl的多个版本,http://curl.haxx.se/download/wgethttps://curl.haxx.se/download/curl-7.55.1.tar.gztar-xzvfcurl-7.55.1.tar.gzcdcurl-7.55.1./configurema

  • jdbc事物描述_事物包括哪些

    jdbc事物描述_事物包括哪些数据库事务数据一旦提交,就不可回滚那些操作会导致数据的自动提交?DDL操作一旦执行,都会自动提交-. set autocommit = false不起作用DML默认情况下,一旦执行就会自动提交-. 可以设置set autocommit = false关闭连接的时候会自动提交 Connection connection = DriverManager.getConnection(url, user, password); connection.setAutoCommit

  • goland 2021.12激活码[最新免费获取]「建议收藏」

    (goland 2021.12激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

  • 在服务器上排除问题的头五分钟

    在服务器上排除问题的头五分钟

发表回复

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

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