缓冲区的疑问?recvfrom()
做了点对点的聊天框架 在输入回路IP(127.0.0.1)发送信息时第一条显示没问题 但第二条就出错了
发送函数
CString strsend;
GetDlgItemText(IDC_EDIT2,strsend);
sendto(m_socket,(LPSTR)(LPCTSTR)strsend,2*strsend.GetLength(),0,(SOCKADDR*)&addrto,sizeof(SOCKADDR));
接受函数
CString recv;
CString remp;
int retv;
while(1)
{retv=recvfrom(sock,(LPSTR)(LPCTSTR)recv,200,0,(SOCKADDR*)&addr,&len);
if(SOCKET_ERROR==retv)
{break;}
remp.Format(_T("%s说:%s"),(LPCTSTR) inet_ntoa(addr.sin_addr),recv);
::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)(LPSTR)(LPCTSTR)recv);//定义了一个消息
消息处理函数
LRESULT Cchat1Dlg::OnRecvData(WPARAM wParam,LPARAM lParam)
{
CString str=(LPCTSTR)lParam;
CString strtemp;
GetDlgItemText(IDC_EDIT1,strtemp);
str +="\r\n";
str +=strtemp;
SetDlgItemText(IDC_EDIT1,str);
return 0;
}
结果 第一次发送"hhhh"正常显示,第二次发送"g" 显示"ghhh"
测试了下CString 类 重复赋值 不会保留以前的数据的 但recvfrom 也会清空缓存的 为什么会出现这种情况???