按钮“发送”的消息响应函数
if (CliSock.m_bConnected) {//如果连接上,那么执行发送操作
NeedSend=TRUE;
CliSock.m_nLength=MSG.GetWindowText(CliSock.m_szBuffer,4096*sizeof(wchar_t));//获取对话框中的信息
CliSock.AsyncSelect(FD_WRITE);//启动OnSend();
MSG.SetWindowTextW(L"");
}OnSend函数
// TODO: 在此添加专用代码和/或调用基类
//下面两行代码用来获取对话框指针
CTalkToolApp* pApp=(CTalkToolApp* )AfxGetApp();
CTalkToolDlg* pDlg=(CTalkToolDlg* )pApp->m_pMainWnd;
if(!pDlg->NeedSend) return;

//发送消息
Send(m_szBuffer,m_nLength,0);
CString str=m_szBuffer;
//显示已发送的消息
pDlg->MSGs.InsertString(pDlg->MSGs.GetCount (),L"已发送:"+str);

m_nLength=0;
memset(m_szBuffer,0,4096*sizeof(wchar_t));//继续提请一个“读”的网络事件,接收Server消息
AsyncSelect(FD_READ);
CAsyncSocket::OnSend(nErrorCode);Receive函数
// TODO: 在此添加专用代码和/或调用基类
m_nLength=Receive(m_szBuffer,4096*sizeof(wchar_t),0);
//下面两行代码用来获取对话框指针
CTalkToolApp* pApp=(CTalkToolApp* )AfxGetApp();
CTalkToolDlg* pDlg=(CTalkToolDlg* )pApp->m_pMainWnd;
pDlg->MSGs.InsertString(pDlg->MSGs.GetCount (),m_szBuffer);
//往列表框中插入接收的文本
CString str=m_szBuffer;
pDlg->MSGs.InsertString(pDlg->MSGs.GetCount (),L"已接收:"+str);
memset(m_szBuffer,0,4096*sizeof(wchar_t));
CAsyncSocket::OnReceive(nErrorCode);例如我发送sdf,接受到的是:sd
发送sdfdsfsdf,接受到的是:sdfds
总是会少掉一些,为什么??

解决方案 »

  1.   

    是不是在CHAR和WCHAR_T转换的时候出问题了
      

  2.   

    Receive函数 
    //   TODO:   在此添加专用代码和/或调用基类 
    m_nLength=Receive(m_szBuffer,4096*sizeof(wchar_t),0); 
    设个断点跟下就知道了
      

  3.   

    你的m_szBuffer是怎么定义的?
    调试下你的发送是多少字节,Send返回的是发送的字节数.Receive返回的是接收的字节数
      

  4.   

    知道了,谢谢各位,我的m_szBuffer是宽字符,在Send的时候长度忘了*2,会吸取教训的!
      

  5.   

    知道了,我的m_szBuffer定义为宽字符,而我在Send的时候忘了长度*2了,会吸取教训的!