long CEmdMain::OnClientMsg(WPARAM wParam, LPARAM lParam)
{
// CReadHead rh;
flay=TRUE;
char buf[1024];
int len;
switch(lParam)
{
case FD_CONNECT:
m_strShow = "连接到服务器……";
UpdateData(FALSE);
return 0;
case FD_READ:
len = recv(m_hSocket, buf, 1024, 0);
buf[len]=NULL;
m_strShow += "\r\n";
m_strShow += buf;
// rh.read(buf);
UpdateData(FALSE);
return 0;
case FD_WRITE:
return 0;
case FD_CLOSE:
return 0;
default:
closesocket(m_hSocket);
return 0;
}
}------------------
OnClientMsg 自己定义的winsocket 1.1 的处理函数,我在里面调用别的一个类,程序就自动退出,那个类和方法我测试了几遍没有问题,对C++不是很熟,把屏蔽掉就没问题,

解决方案 »

  1.   

    可以跟进rh.read(buf);中去看看。
      

  2.   

    我在一个BUTTON 的点击直接调用了,RH.READ(BUF),没有问题
      

  3.   

    这样也不能证明RH.READ(BUF)没有问题,buf的内容都相同吗?
      

  4.   

    char buf[1024+1]; 
    其它没看出问题。
      

  5.   

    default:
    closesocket(m_hSocket);
    return 0;
    }连接的时候,到这里就退出了,我狂晕,吧readhead屏蔽,就不报错,我根本还没有调用那个函数;
      

  6.   

    用指针试试看呢:
    CReadHead *rh = new CReadHead();
    if(rh == NULL) return;
    rh->read(buf);或者加上try
    try {
    CReadHead *rh = new CReadHead();
    }catch(...)
    {
    }
    try {
    rh->read(buf);
    }catch(...)
    {
    }
      

  7.   

    closesocket(m_hSocket); 时有没有其它的地方用到这个m_hSocket?
      

  8.   

    len = recv(m_hSocket, buf, 1024, 0);
    buf[len]=NULL; 为什么不检查一下recv的返回值,第一判断是否成功,第二看看是否越界,别忘了buf的大小是1024,而len是有可能返回1024的,那么buf[1024]就越界了