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环境下运行收的字符不完整还有乱码!!!
望高手指点迷津

解决方案 »

  1.   

    首先,我告诉你,CString 型变量是不能用于网络传输的,还有,在接收的时候
    TCHAR Buff[1026];
    然后必须要 memset(Buff,0,1026);来清 0 缓冲区
    见 http://topic.csdn.net/u/20080825/23/4b4ac5bf-50c1-404a-a75e-f19a9c1fe697.html
      

  2.   

    nSend = m_tsConnectSocket.Send(m_szMessage,nLen);貌似这步的时候windows给你把CString转换成MBCS了,只是貌似,你收到的也应该是MBCS数据。一个避免这个问题的方法是:直接发送二进制,把CString中的内容写到unsigned char 数组里,再发送!
    接收以后,再把u_char 数据还原。