小弟在写一个IP多播的程序首先我把需要发送的数据封装在一个结构体中 typedef struct 
{
   char say[50];     
   char fname;   
   char lname;   
   int  flag;      
   int info[400];  
   int check;       
}MSG;
然后发送这个结构体,在接收端接收数据,并对数据进一步处理,响应接收的是调用下面这个函数
void CMyDialog::Receive()
{
 MSG msg3;
int nAddrLen=sizeof(srcaddr);
int nRet=recvfrom(m_hGroupSocket,(char*)&msg3, sizeof(msg3),0,(sockaddr*)&srcaddr,&nAddrLen);//
m_showmsg.SetSel(-1, -1);//经论坛上高人指点实现在编辑框中自动滚动显示每条消息结构中的文字信息
CString strMsg((LPCTSTR)msg3.say);
strMsg+=_T("\r\n");
m_showmsg.ReplaceSel(strMsg);
}
我想把接收的数据中的字符串显示在编辑框控件中,多播组中每次发的信息其中包含的文字信息都显示在编辑框空间中,m_showmsg是编辑框控件的控制变量,上面想实现滚动条自动滚动。我是用VS2005编辑的程序,并且VS2005安装在虚拟机上。调试完后程序在虚拟机中运行时只能显示一条接收到消息结构体中的文字信息。当
再次发送不同信息结构体时编辑框中仍然只能显示第一次接收的文字信息。不能实现自动滚屏,而且只能显示一行。我把程序在笔记本的本机系统上运行时就能正确实现自动滚屏,对多个消息进行多行显示(就跟聊天室一样的效果)。
我把程序在一个台式机上(非虚拟机系统)重新编译运行时,结果跟在虚拟机中运行一样,只能显示一行信息,且不能滚屏。请问各位这是问什么呢?该如何解决啊 ,不可能写一个程序只能在自己电脑上运行啊。

解决方案 »

  1.   

        int  nLength  =  m_showmsg.SendMessage(WM_GETTEXTLENGTH);  
        m_showmsg.SetSel(nLength,  nLength);  
        strMsg+=_T("\r\n");
        m_showmsg.ReplaceSel(strMsg"); 
      

  2.   

    1.看以下的Edit设置是否有Multiline和Auto Scroll属性有没有开启
    2.断点判断MSG中的内容接收是否正确
      

  3.   

    是的我的笔记本是vista(程序能正确运行),台式机是XP系统,还有处理器不一样笔记本式Intel的,台式机是AMD的,请问这些和不能运行有关系吗?现在很是迷茫
      

  4.   

    我的电脑是XP的,没有遇见过你说的那个情况。我在2楼给你的那段代码是可以在XP上可以实现Edit滚动的,以前用过的。
    你的工程编码是不是多字节的?
      

  5.   

    我开始试过你那个代码,在XP系统下一直是只显示一行,在vista系统下运行程序没有问题,本来就是新手,遇到这种莫名其妙的问题,查资料都不知道看啥
      

  6.   

    我已把代码上传到我的资源,您有时间帮忙看一下吗,我在别人的笔记本上(win7系统)运行也没有问题。我写的是IP多播,是不是跟硬件配置有关系,比如网卡,台式机的硬件较老是不是硬件不支持多播功能
      

  7.   

    Sendto里面那个地址参数不对。第一次发送是对的,第二次发送就不对了。调试的话能看出来...还以为是Edit滚动显示有问题呢。
    在Receive函数上面打个断点很容易发现是没有接收到数据....
      

  8.   

    int nReturnCode = sendto(m_hSocket, (char*)&msg2, sizeof(MSG), 0, 
     (LPSOCKADDR)&srcaddr, sizeof(SOCKADDR));
    上面是发送函数请问是srcaddr这个地址参数有问题吗?我改了半天也没弄明白,能提示一下吗,麻烦您了
      

  9.   

    我找出错误了,是接收函数的recvfrom()函数的地址参数有问题,自己对知识不熟悉,所以对这些细节的错误总是很难发现,谢谢你能抽时间帮我看代码。