struct sockaddr_in addr;
int addr_len = sizeof(struct sockaddr_in);
CString strState;
//记得要用char接收数据,因为网络中传输的数据只是和编码方式无关的字节流
//所以接收到字节流后再转化为宽字符unicode编码方式用于显示和写文件
char tempSocketReceive[MAXDATALENGTH] = "";
memset(tempSocketReceive, 0, MAXDATALENGTH);//char清空;
tempSocketReceive[MAXDATALENGTH - 1] = '\0';//防止数据末尾出现烫烫烫烫,加上之后仍然出现
int length = recvfrom(listen_socket, tempSocketReceive, MAXDATALENGTH, 0, (struct sockaddr *)&addr, &addr_len);
//判断为将多字节编码转化为宽字节编码所需要的内存空间
DWORD dwNum = MultiByteToWideChar(CP_ACP, 0, tempSocketReceive, -1, NULL, 0);
//在堆上分配内存,申请的内存必要要释放,不然早晚会内存泄露
导致程序崩溃
wchar_t *pwText;
pwText = new wchar_t[dwNum];
//将对字节转换位宽字皆unicode,转换结果保存在堆内存上,记得
delete
MultiByteToWideChar(CP_ACP, 0, tempSocketReceive, -1, pwText, dwNum);
//将收到的数据用CString表示,便于在MFC上显示和用CFile写入文件
CString rawData(pwText);//未经解析的原始串口数据数据
CString temp = comDecode(rawData);//经过解析的串口数据
//堆内存已经由CString的构造函数转化栈内存,所以堆内存尽早释放
delete[]pwText;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)