我做的是一个简单C/S的聊天室程序发送代码:CString strname, info;
((CEdit*)GetDlgItem(IDC_EDIT3))->GetWindowText(strname);
info.Format(_T("%s-->进入聊天室."),strname);
send(m_SockClient, (char*)info.GetBuffer(), info.GetLength() + 1, 0);info.Format(_T("%s 说 : %s"),name, strData);
send(m_SockClient, (char*)info.GetBuffer(), info.GetLength() + 1, 0);
m_MsgList.AddString(info); //直接加入ListBox能正常显示
((CEdit*)GetDlgItem(IDC_EDIT5))->SetWindowText(TEXT(""));接受代码;char buffer[1024];
int num = recv(m_SockClient, buffer, 1024, 0);
buffer[num] = 0;
m_MsgList.AddString((LPCTSTR)buffer);
return 1;只有前几个字符能正常显示
比如:
小王-->进 后面的都是乱码
小王说: 后面的也是乱码
本人没分了 希望大侠多多指点
((CEdit*)GetDlgItem(IDC_EDIT3))->GetWindowText(strname);
info.Format(_T("%s-->进入聊天室."),strname);
send(m_SockClient, (char*)info.GetBuffer(), info.GetLength() + 1, 0);info.Format(_T("%s 说 : %s"),name, strData);
send(m_SockClient, (char*)info.GetBuffer(), info.GetLength() + 1, 0);
m_MsgList.AddString(info); //直接加入ListBox能正常显示
((CEdit*)GetDlgItem(IDC_EDIT5))->SetWindowText(TEXT(""));接受代码;char buffer[1024];
int num = recv(m_SockClient, buffer, 1024, 0);
buffer[num] = 0;
m_MsgList.AddString((LPCTSTR)buffer);
return 1;只有前几个字符能正常显示
比如:
小王-->进 后面的都是乱码
小王说: 后面的也是乱码
本人没分了 希望大侠多多指点
解决方案 »
- 怎样获取打开图片的句柄?
- 急!!!有关vc实时曲线类的问题
- VC6中调试功能step into失效!
- 同样是API RegQueryValueEx(),为什么DEBUG模式下读出来的键值是正确的,而在RELEASE模式下读出来的是空串?
- 如何取得CPU使用的百分比?
- NM_CUSTOMDRAW问题
- fatal error C1083: Cannot open type library file: 'msxml4.dll':
- 求教VARIANT方面问题
- 那位仁兄能介绍几本好点的关于图形图像编程的书?
- C++ 读取.mov 文件,获得第一帧,并保存为图片
- 通过内存DC在位图里作画,为什么要读入位图
- 遇到个问题求助~~~
buffer[num] = 0;
加上buffer[num+1] =0;因为你的工程是unicode,空字节要占两位。
改为多字节就只需一句了
还有一种方法:
定义TCHAR *P = (TCHAR *)buffer;
*(p + num / (sizeof(THCAR)/sizeof(char))) = 0;
办法有:1。阻塞接收,
2。在数据报头四个字节为包长。
一般的写法是,在数据包头前若干个字节包含了一个整包长度的int
bool blState = true;
while(blState )
{
int nLen = recv(...)
int nPacketLen = 截取出整个数据包的长度。
if(nPacketLen > nLen )
{
//说明包没有接收完整,继续接受
continue;
}
else
{
blState = false;
}
}
3。
用原始套接字接收
int totallen =0;
while(1 )
{
int nLen = recv(...)
int nPacketLen = 截取出整个数据包的长度。
totallen += nLen;
if(nPacketLen > totallen )
{
//说明包没有接收完整,继续接受
continue;
}
else
{
break;
}
}小错误呵呵
//socket 根本不支持unicode,要转成双字节字符串.
后来我把UNICODE取消了就可以了
char buffer[1024];
int num = recv(m_SockClient, buffer, 1024, 0);
CString str="";
for(int i=0;i<num;i++)str+=buffer[i];
m_MsgList.AddString((str);
return 1;
int num = recv(m_SockClient, buffer, 1024, 0);
为什么要加buffer[num]=0;//不要它
CString str;
str=buffer;
AfxMessageBox(str);