为什么我的字符显示不正确,哪位大神给详细讲解一下,不胜感激
我看的是孙鑫的异步套接字网络编程的聊天室程序,他用的是VC6.0,而我用的是VS08。
代码如下
case FD_READ:
WSABUF wsabuf;
wsabuf.buf=new char[200];
wsabuf.len=200;
DWORD dwRead;
DWORD dwFlag=0;
SOCKADDR_IN addrFrom;
int len=sizeof(addrFrom);
CString str;
if(SOCKET_ERROR==WSARecvFrom(m_socket,&wsabuf,1,&dwRead,&dwFlag,(SOCKADDR*)&addrFrom,&len,NULL,NULL))
{
MessageBox(_T("接收数据失败!"));
return false;
}
str.Format(_T("from %s said:%s "),(LPTSTR)inet_ntoa(addrFrom.sin_addr),(LPTSTR)wsabuf.buf);
CString temp;
GetDlgItemText(IDC_Recv,temp);
temp+=_T("/r/n")+str;
SetDlgItemText(IDC_Recv,temp);
[解决办法]
没有根据收到的字节长度,对缓冲区的最后一位设置\0,而直接把缓冲区当字符串使用,所以后面都是未初始化的内存内容。
另外"/r/n",是笔误吧,"\r\n"才是C字符串换行标准。
[解决办法]
没有设置字符串结束标记\0
[解决办法]
wsabuf.buf=new char[200];
ZeroMemory(wsabuf,200);
[解决办法]
把UNICODE字符集改成多字节字符集试试,方法:项目-》项目属性-》常规-》字符集
[解决办法]
还有就是str.Format(_T("from %s said:%s "),(LPTSTR)inet_ntoa(addrFrom.sin_addr),(LPTSTR)wsabuf.buf),这条语句(LPTSTR)wsabuf.buf不要进行强制转换,会导致数据的丢失,不进行可能会出错,但改了字符集就应该没有问题了
[解决办法]