java c socket通信 中文乱码解决「建议收藏」

java c socket通信 中文乱码解决「建议收藏」前言(扯淡)作为一个一直从事Java的人来说,突然做C++很多地方都是乱撞墙,就发送的这个乱码就让人感到十分头秃,昨天跟老板对话,老板说不行咱就花钱找别人做。。。能力别质疑的感觉真是让人糟心啊–不扯太多,程序员节快乐,大家一起头秃吧。。虽然我并不想秃。问题言归正传,c++接收信息是gb2312,Java发数据是UTF-8,我Java接收数据没有问题,但是发给C++就遇到乱码问题…

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

前言(扯淡)

作为一个一直从事Java的人来说,突然做C++很多地方都是乱撞墙,就发送的这个乱码就让人感到十分头秃,昨天跟老板对话,老板说不行咱就花钱找别人做。。。能力别质疑的感觉真是让人糟心啊- –

不扯太多,程序员节快乐,大家一起头秃吧。。虽然我并不想秃。

问题

言归正传,c++接收信息是gb2312,Java发数据是UTF-8,我Java接收数据没有问题,但是发给C++就遇到乱码问题了。此处可以参考博客:https://blog.csdn.net/weihongchang/article/details/17245223

不过我这样做在C++还是不能正确输出,后来一顿操作之后,把原先的输出方法printf换成了cout。。。结果就正确输出了。下面把发送程序和C++监听端口接收都发出来。

Java通过Socket发送数据:

    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1",8090);
        socket.getOutputStream().write("哈哈哈,My name is BeryAllen,迈克尔".getBytes("gb2312"));
        socket.close();
    }

C++接收数据:

#include <stdio.h>
#include <iostream>
#include <WINSOCK2.H>
#include "源文件.h"

using namespace std;

void ListenServer() {
	WSADATA  wsaData;
	SOCKET   sSerSock;
	SOCKET   sAccSock;
	sockaddr_in  serAddr;
	sockaddr_in  acc_sin;
	int  acc_sin_len;
	int recv_len;
	char szMsg[200];

	if (WSAStartup(0x0101, &wsaData) != 0)
	{
		fprintf(stderr, "WSAStartup failed: %d\n", GetLastError());
		return;
	}

	if ((sSerSock = ::socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
	{
		fprintf(stderr, "Socket() failed: %d\n", WSAGetLastError());
		return;
	}

	serAddr.sin_family = AF_INET;
	serAddr.sin_port = ::htons(8090);
	serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	if (bind(sSerSock, (LPSOCKADDR)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
	{
		fprintf(stderr, "bind(sock) failed: %d\n", ::WSAGetLastError());
		return;
	}
	//将socket由主动发送转为被动监听,当存在半连接时放入队列中,队列大小设置为20
	if (listen(sSerSock, 20) != 0)
	{
		return;
	}

	acc_sin_len = sizeof(acc_sin);
	while (1)
	{

		sAccSock = accept(sSerSock, (struct sockaddr*) & acc_sin, &acc_sin_len);
		printf("接收套接字开始接收数据。。。。\n");

		if (sAccSock < 0)
		{
			continue;
		}
		recv_len = recv(sAccSock, szMsg, strlen(szMsg), 0);
		if (recv_len == SOCKET_ERROR)
		{
			continue;
		}
		else {
			
			fprintf(stderr, "%d长度\n", recv_len);
			/* recv_len 为接收数据的真实长度,此语句去除多余的无效字符。(在末尾加入字符串结束符号'\0')*/
			szMsg[recv_len] = '\0';
			string str(szMsg);
			cout << str << endl;
		}
		
		if (recv_len == 0)
		{
			continue;
		}
		else
		{
			printf("本次数据接收结束。\n");
		}
	}

	closesocket(sAccSock);
	closesocket(sSerSock);
	WSACleanup();
}

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java 删除文件以及文件夹删除不了的问题

    Java 删除文件以及文件夹删除不了的问题问题所在今天在编写一个项目,流程是先创建一个临时文件夹存放生成的文件,再经过压缩导出,待导出成功后删除临时文件夹,但是怎么也删除不了,还以为是写的删除方法有问题,找来找去,试了很多方法也删除不了本来以为是打包的流没关闭,但是发现流都是关闭的,后来发现,是在生成的方法里,直接newFileWriter出来的,没有关闭,在这里提醒一下,关于操作文件或者文件夹一定都会用到流,所以用到的流一…

    2022年6月7日
    31
  • XAMPP中apache启动不了

    XAMPP中apache启动不了问题XAMPP中apache启动不了原因端口被占用解决方案端口被占用,点击右上角的Config(前提是要管理员身份运行,不然修改不了),把80改成801,把443改为4431,改为之后,点击Apache那一列的hppd.conf->Listen80改成Listen801,hppd-ssl.conf->Listen443改成Listen4431。…

    2022年7月13日
    28
  • netty pooled vs unpooled ByteBuf

    netty pooled vs unpooled ByteBufWhatsthedifferencebetweenPooledvsUnpooledandDirectvsHeapinByteBuf?Like,whatdoespooledmeansincontextofamessagereceived,becauseobjectlikeHttpRequestiscreatedfromBy…

    2025年6月7日
    0
  • mac配置vscodec语言环境_vscodejava环境变量配置

    mac配置vscodec语言环境_vscodejava环境变量配置登陆终端输入java-version查看java的版本输入java-verbose查看java的安装环境路径没有的话,自己去搜一下怎么安装java的jdk,记得选1.18版本安装路径在这里安装完jdk后,输入/usr/libexec/java_home-V查看jdk版本复习什么是JDKJavaDevelopmentKit开发工具包包含Java开发工具和JREjava开发工具:编译工具javac.exe,jar.exe打包工具等。JRE=JVM+javaS

    2022年10月3日
    0
  • 记录首次在云服务器部署spring boot项目,并实现域名访问

    记录首次在云服务器部署spring boot项目,并实现域名访问第一次写博客,对初次服务器部署做一个记录,写的有错或者纰漏欢迎指正文章目录前言一、服务器准备二、安装需要的东西1.jdk2.redis3.MySQL部署项目三.域名访问总结在看.

    2022年10月3日
    0
  • t460 拆解_转一个详尽、全面的的X201拆机 – ThinkPad系统与软件技术|应用技巧|软件分享区 – 鸿利在线|北京ibm水货|IBM水货|Thinkpad笔记本|Thinkpad全球购|…

    t460 拆解_转一个详尽、全面的的X201拆机 – ThinkPad系统与软件技术|应用技巧|软件分享区 – 鸿利在线|北京ibm水货|IBM水货|Thinkpad笔记本|Thinkpad全球购|…占楼············下载(30.5KB)2010-6-123:42下载(20.97KB)2010-6-123:42ThinkPadX201的防水键盘,其实很多商务机都具备防水键盘,并不是说底部没有排水口的笔记本其键盘就不防水,是否防水取决于键盘导电薄膜边缘是否被密封。X201的键盘侧面有漏口,严格来说这不仅是防水键盘,而是进一步的防泼溅键盘。下载(23.51KB)2010…

    2022年6月27日
    63

发表回复

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

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