小弟正在用套接字相关函数做一个聊天室系统。
目前遇到这样一个问题,十分纠结。
我用的是vs2008,使用unicode编码。
想将CString数据传递
CString strTempInfo;
send(m_client, (char*)strTempInfo.GetBuffer(0), strTempInfo.GetLength(), 0);
但总是接收不到
num = recv(m_clients[p], (char*)buffer.GetBuffer(0), buffer.GetLength(), 0);不知该怎么办?
目前遇到这样一个问题,十分纠结。
我用的是vs2008,使用unicode编码。
想将CString数据传递
CString strTempInfo;
send(m_client, (char*)strTempInfo.GetBuffer(0), strTempInfo.GetLength(), 0);
但总是接收不到
num = recv(m_clients[p], (char*)buffer.GetBuffer(0), buffer.GetLength(), 0);不知该怎么办?
LPSTR CStringToChar(CString strValue)
{
#if defined(_UNICODE) || defined(UNICODE)
LPTSTR ret = new TCHAR[strValue.GetLength()+1];
lstrcpy(ret,strValue.GetBuffer());
LPWSTR lpWStr = (LPWSTR)ret;
int len = _tcslen(lpWStr)*2+1;
LPSTR strbuf = new char[len];
memset(strbuf,0,len);
WideCharToMultiByte(CP_OEMCP,0,lpWStr,-1,strbuf,len,NULL,NULL);
return strbuf;
#else // For Ansi Version
LPTSTR ret = new TCHAR[strValue.GetLength()*2+1];
lstrcpy(ret,strValue.GetBuffer());
return (LPSTR)ret;
#endif
}
CString strTempInfo;
LPSTR temp = CStringToChar(strTempInfo);send(m_client, temp , strlen(temp), 0);将CString转化为char*再发送
{
#if defined(_UNICODE) || defined(UNICODE)
LPTSTR ret = new TCHAR[strValue.GetLength()+1];
lstrcpy(ret,strValue.GetBuffer());
LPWSTR lpWStr = (LPWSTR)ret;
int len = _tcslen(lpWStr)*2+1;
LPSTR strbuf = new char[len];
memset(strbuf,0,len);
WideCharToMultiByte(CP_OEMCP,0,lpWStr,-1,strbuf,len,NULL,NULL);
return strbuf;
#else // For Ansi Version
LPTSTR ret = new TCHAR[strValue.GetLength()*2+1];
lstrcpy(ret,strValue.GetBuffer());
return (LPSTR)ret;
#endif
}
CString strTempInfo;
LPSTR temp = CStringToChar(strTempInfo);send(m_client, temp , strlen(temp), 0);将CString转化为char*再发送
char buff[1024];
num = recv(m_clients[p], buffer, 1024, 0);
所以你应该先GetLength,再GetBuffer,然后ReleaseBuffer。
否则CString缓冲区大小是不会变的,ReleaseBuffer后还是原来大小。尽量避免同一行里出现GetBuffer和其它功能。ReleaseBuffer后再用那些功能。
最好是先放到一个TCHAR数组里,再用CString的构造函数传入数组。