CAsyncSocket在Unicode下出现乱码

liuminghacker 2008-08-29 10:09:06
CEDIT CString m_szServerName;
CEDIT CString m_szMessage;
CListBox m_lsMsgList;

void CSocketDlg::OnBnClickedBsend()
{
// TODO: 在此添加控件通知处理程序代码
int nLen,nSend;
UpdateData(TRUE);
if(m_szMessage != _T(""))
{
nLen = m_szMessage.GetLength();
nSend = m_tsConnectSocket.Send(m_szMessage,nLen);
if(nSend != SOCKET_ERROR)
{
CString s;
s.Format(_T("发送到 %s 的TCP数据:%s"),m_szServerName,m_szMessage);
m_lsMsgList.AddString(s);
m_szMessage = _T("");
}
}
UpdateData(FALSE);
}


void CSocketDlg::OnReceive(void)
{
TCHAR Buff[1026];
int nBufSize = 1024;
int nRecv;
CString strRecv;
CString name;
UINT iPort;

nRecv = m_tsConnectSocket.Receive(Buff,nBufSize);
if(nRecv != SOCKET_ERROR)
{
Buff[nRecv] = _T('\0');
m_tsConnectSocket.GetPeerName(name,iPort);
strRecv.Format(_T("收到 %s:%d 的TCP数据:%s"),name,iPort,Buff);
m_lsMsgList.AddString(strRecv);
}
}



该程序在ANSI环境下运行正常,在Unicode环境下运行收的字符不完整还有乱码!!!


望高手指点迷津
...全文
164 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuminghacker 2008-08-29
  • 打赏
  • 举报
回复
顶一下 高手快来啊
liuminghacker 2008-08-29
  • 打赏
  • 举报
回复
谢谢 原来是这样啊
街坊跳舞 2008-08-29
  • 打赏
  • 举报
回复
nSend = m_tsConnectSocket.Send(m_szMessage,nLen);

貌似这步的时候windows给你把CString转换成MBCS了,只是貌似,你收到的也应该是MBCS数据。

一个避免这个问题的方法是:直接发送二进制,把CString中的内容写到unsigned char 数组里,再发送!
接收以后,再把u_char 数据还原。
lhsxsh 2008-08-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 exceed_me 的回复:]
首先,我告诉你,CString 型变量是不能用于网络传输的,还有,在接收的时候
TCHAR Buff[1026];
然后必须要 memset(Buff,0,1026);来清 0 缓冲区
见 http://topic.csdn.net/u/20080825/23/4b4ac5bf-50c1-404a-a75e-f19a9c1fe697.html
[/Quote] 有理
exceed_me 2008-08-29
  • 打赏
  • 举报
回复
首先,我告诉你,CString 型变量是不能用于网络传输的,还有,在接收的时候
TCHAR Buff[1026];
然后必须要 memset(Buff,0,1026);来清 0 缓冲区
见 http://topic.csdn.net/u/20080825/23/4b4ac5bf-50c1-404a-a75e-f19a9c1fe697.html
exceed_me 2008-08-29
  • 打赏
  • 举报
回复
我是默认情况下的,也会出现乱码

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧