请大侠帮忙看看下面这段代码为什么只能接受到前面一半字符

yuguo138 2006-11-23 09:32:53
发送代码
void CltgjDlg::OnBnClickedSend()
{
UpdateData(true);
if(!edit_msg.IsEmpty())
{
CString msg;
CString sendmsg=edit_msg;
int len=sendmsg.GetLength();
m_connectsocket.Send(sendmsg.GetBuffer(len),len);
GetDlgItem(TEXT_MSG)->SetWindowTextW(sendmsg);
//GetDlgItem(TEXT_MSG)->SetWindowTextW(_T("等待回应中...."));
if(server==true)
{
msg=_T("系统消息:")+edit_msg;
}
else
{
msg=_T("用户:")+edit_msg;
}

listbox_msg.AddString(msg);
}
edit_msg.Empty();
//GetDlgItem(TEXT_MSG)->SetWindowTextW(_T("等待回应中...."));
GetDlgItem(EDIT_MSG)->SetFocus();
UpdateData(false);
// TODO: 在此添加控件通知处理程序代码
}
接受代码
void CltgjDlg::Receive()
{
GetDlgItem(TEXT_MSG)->SetWindowTextW(_T("接受到信息."));
char *buff=new char[1024];
int cc;
cc=m_connectsocket.Receive(buff,1024);
if(cc!=SOCKET_ERROR)
{
CString msgtext,msgtext1;

for(int i=0;i<1024;i++)
{msgtext1=buff[i];
if((msgtext1!="\0")&&(msgtext1.IsEmpty()==false))
{msgtext=msgtext+msgtext1;}}
listbox_msg.AddString(msgtext);

}
else
{GetDlgItem(TEXT_MSG)->SetWindowTextW(_T("连接故障"));}
}
...全文
186 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuguo138 2006-11-23
  • 打赏
  • 举报
回复
改程序搬到2003状态下一切正常,2005麻烦一大堆.
wsb_8224 2006-11-23
  • 打赏
  • 举报
回复
我也遇到过同样的问题,你先要得到你需要的字符长度Len,然后用msgtext.Left(Len)就可以拉
yuguo138 2006-11-23
  • 打赏
  • 举报
回复
msgtext.Format(_T("%s"),buff);
使用之后仍旧只能显示部分字符,后面跟一大堆乱码.
yuguo138 2006-11-23
  • 打赏
  • 举报
回复
有没有其他办法可以解决的,就是二楼的完整的方法又是什么,谢谢
yuguo138 2006-11-23
  • 打赏
  • 举报
回复
首先谢谢楼上的.但是有错误
错误 1 error C2664: 'void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)' : cannot convert parameter 1 from 'const char [5]' to 'const wchar_t *' g:\测试项目\网络聊天工具\ltgj\ltgj\ltgjdlg.cpp 232

照你的贴的,出错,我的环境是VS2005,不是VS2003
alfwolf 2006-11-23
  • 打赏
  • 举报
回复
首先你的做法并不安全.因为不能保证一次接收的数据是完整的.
当然,如果非要这样做,你的代码可以这样写:
void CltgjDlg::Receive()
{
GetDlgItem(TEXT_MSG)->SetWindowTextW(_T("接受到信息."));
char *buff=new char[1024];
int cc;
cc=m_connectsocket.Receive(buff,1024);
if(cc!=SOCKET_ERROR)
{
CString msgtext;

msgtext.Format( "%s", buff );
listbox_msg.AddString(msgtext);

}
else
{GetDlgItem(TEXT_MSG)->SetWindowTextW(_T("连接故障"));}
}
XiaoFaye 2006-11-23
  • 打赏
  • 举报
回复
改成 m_connectsocket.Send(sendmsg.GetBuffer(len),len*2); 就行的啦。


相信我吧,我也是用VS 2005的。

http://xiaofaye.spaces.live.com/

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧