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++不是很熟,把屏蔽掉就没问题,
{
// 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++不是很熟,把屏蔽掉就没问题,
其它没看出问题。
closesocket(m_hSocket);
return 0;
}连接的时候,到这里就退出了,我狂晕,吧readhead屏蔽,就不报错,我根本还没有调用那个函数;
CReadHead *rh = new CReadHead();
if(rh == NULL) return;
rh->read(buf);或者加上try
try {
CReadHead *rh = new CReadHead();
}catch(...)
{
}
try {
rh->read(buf);
}catch(...)
{
}
buf[len]=NULL; 为什么不检查一下recv的返回值,第一判断是否成功,第二看看是否越界,别忘了buf的大小是1024,而len是有可能返回1024的,那么buf[1024]就越界了