问题:VC/MFC/VS2010 CAsyncSocket 网络编程中遇到的问题?

xiaojie10090 2012-05-22 06:10:57
CTestClientApp* pApp=(CTestClientApp*)AfxGetApp();
CTestClientDlg* pDlg=(CTestClientDlg*)pApp->m_pMainWnd;
memcpy(m_szBuffer,"Connected to ",13);
strncat(m_szBuffer,pDlg->m_szServerAdr,sizeof(pDlg->m_szServerAdr));
pDlg->m_receivemsg.InsertString(0,CString(m_szBuffer));

运行程序后,在m_receivemsg成员变量所代表的ListBox控件中显示“Connect to 1”,实际上应该显示“Connect to 10.0.0.6”的,为什么后面的没有了呢?因为m_szServerAdr这个字符串数组中存放的应该是字符串“10.0.0.6”的啊,我怀疑是strncat(m_szBuffer,pDlg->m_szServerAdr,sizeof(pDlg->m_szServerAdr));这个地方的问题,请高手指教!
...全文
265 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaojie10090 2012-05-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

我也遇到过类似问题,把char[]赋值给CString时,只是赋值第一个字符,原因未明。不过下面一段代码倒是可以,我照着写缺不行。
len = recv(m_client.m_hSocket,s,1024,0);
s[len] = NULL;
m_sShowText += s;//m_sShowText为CString
//随时跟踪滚动条的位置
output = (CEdit *)……
[/Quote]

看一下7楼还有我给7楼的回复吧~呵呵,希望对你有用
xiaojie10090 2012-05-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

看你的代码怎么这么累的呢!

memcpy(m_szBuffer,"Connected to ",13);
strncat(m_szBuffer,pDlg->m_szServerAdr,sizeof(pDlg->m_szServerAdr));
应该改成
strncpy(...);
strncat(...);

如果我写就2句代码,如下:
CString strShow;
s……
[/Quote]

嗯,后来我也是这么写的,跟你的差不多,呵呵
CString str;
str=pDlg->m_szServerAdr;
str.Format("Connected to %s",m_szServerAdr);
pDlg->m_receivemsg.InsertString(0,strShow);
这样写完全没问题

总之我发现strncat(),strcat()这些函数在VS2010 UNICODE编码下,根本就不好用!也是想看一下有没有相关解决方法,呵呵,现在不管了,毕业设计赶进度,这个问题就先这样吧,呵呵
Jarrylogin 2012-05-24
  • 打赏
  • 举报
回复
看你的代码怎么这么累的呢!

memcpy(m_szBuffer,"Connected to ",13);
strncat(m_szBuffer,pDlg->m_szServerAdr,sizeof(pDlg->m_szServerAdr));
应该改成
strncpy(...);
strncat(...);

如果我写就2句代码,如下:
CString strShow;
strShow.Format("Connected to %s", pDlg->m_szServerAdr);
pDlg->m_receivemsg.InsertString(0, strShow);
你运行一下试试?
脆弱的肠胃 2012-05-24
  • 打赏
  • 举报
回复
我也遇到过类似问题,把char[]赋值给CString时,只是赋值第一个字符,原因未明。不过下面一段代码倒是可以,我照着写缺不行。
len = recv(m_client.m_hSocket,s,1024,0);
s[len] = NULL;
m_sShowText += s;//m_sShowText为CString
//随时跟踪滚动条的位置
output = (CEdit *)GetDlgItem(IDC_SHOWTEXT);
output->SetWindowText(m_sShowText);
output->LineScroll(output->GetLineCount());
xiaojie10090 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 2 楼 的回复:

解决?


是不是因为m_szServerAdr是CString类型的,怎么解决呢?
[/Quote]

啊,不好意思,说错了,m_szServerAdr是char类型数组
xiaojie10090 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

解决?
[/Quote]

是不是因为m_szServerAdr是CString类型的,怎么解决呢?
xiaojie10090 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

解决?
[/Quote]

我做的不对,还没有解决,好像是
strncat(m_szBuffer,pDlg->m_szServerAdr,sizeof(pDlg->m_szServerAdr));
这一句根本就没有把pDlg->m_szServerAdr中的内容添加到m_szBuffer中,好像只添加了个“1”进去(m_szServerAdr中存的是ip地址“10.0.0.6”)
请问是什么情况啊?
Eleven 2012-05-22
  • 打赏
  • 举报
回复
解决?
xiaojie10090 2012-05-22
  • 打赏
  • 举报
回复
我知道了,是pDlg->m_receivemsg.InsertString(0,CString(m_szBuffer));这个地方的问题,类型转换没转换好
CString(m_szBuffer)
m_szBuffer是char类型数组,要想转化成CString,这样写是不行的,改成下面这样就好了

CString str;
str=m_szBuffer;
str.Format(_T(%S),m_szBuffer);
pDlg->m_receivemsg.InsertString(0,str);

18,356

社区成员

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

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