解决方案 »
- VC6工程向导里面的Utility project到底是干什么用的,这种工程是用来生成什么东西的?
- vc2010 MDI选项卡如何指定标签宽度
- 请问有没有windows下的Modbus通讯协议库?谢谢
- 组合框怎么用代码展开?
- 菜鸟求助,一个老问题!
- 嘿嘿,今天敲了偶老总一竹杠
- 怎么为对话框窗口设置颜色?
- 有人有VC写的资源管理器吗?---简单的就行
- 软件工程课上讲的软件的几个流程是什么,什么需求分析啦等等,给个完整的顺序
- 关于CDC
- ListControl控件重回后,前面CheckBox控件丢失。急急急急......
- 菜鸟求助:关于AfxBeginThread,代码有一个error。求大家帮忙看看
即,发送和接受的时候,会有一个指针,然后有长度,至于里面是什么,socket并不关心
这个绝对是不对的~我感觉不可能出现这一种状况
MFC下LZ应该是用的CString类型吧?这个类型在ANSI下就是ANSI,在UNICODE下就是UNICODE
如果你想在UNICODE环境下发送ANSI,先转换编码,再去发送(用CHAR类型)
对于传输的内容格式与接收的格式必须一致!
比如: 发送端 :第一位为指令,后7为数据位,那你的接收端也必须这样分解数据包其实不管你的工程是什么Unicode还是非Unicode,
socket发送内容都是按位发送的!对与"abc"来说,如果是Unicode的它的长度 2倍的非Unicode的长度,
UNICODE你的字符串变成了宽字符串,试试下面这个
pData是你准备发送的数据TCHAR*类型
#ifdef UNICODE //pData是宽字符需要进行转换
char *pBuf = new char[len + 1];
WideCharToMultiByte(CP_ACP, 0, pData, -1, pBuf, len + 1, NULL, NULL);
send(sock, pBuf, len + 1, 0);
#else
send(sock, pData, len + 1, 0)
#endif
确实如你所说 - MFC下CString在UniCode下引起的,我发送char字符串就没有问题了,多谢