求解,socket编程中的recv跟accpet一定要在一个类吗

求解,socket编程中的recv和accpet一定要在一个类吗?
rt,我想做一个聊天软件,有一个主界面,里面有添加的好友,都是一些ip。程序启动时就把程序当做服务器,可以接受其他客户端的连接,当连接到达时弹出聊天窗口,这样的话,recv()和accpet()就不在一个类里面,结果老是出错,请问各位高手有什么解决办法?
------解决方案--------------------
不在一个线程都可以,不在一个类里很正常呀,出错,应该是你程序某个地方写错了
------解决方案--------------------
为什么我accept之后程序就会死掉呢?下面是我的代码

引用:
不在一个线程都可以,不在一个类里很正常呀,出错,应该是你程序某个地方写错了

------解决方案--------------------
本帖最后由 VisualEleven 于 2012-10-12 22:18:45 编辑


BOOL CChat::OnInitDialog() 
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here
CChat * dlg = (CChat *)AfxGetApp()->GetMainWnd();
char name[80];
CString IP;
hostent* pHost; 
gethostname(name, 128);//获得主机名 
pHost = gethostbyname(name);//获得主机结构 
IP = inet_ntoa(*(in_addr *)pHost->h_addr);
    show_edit = (CEdit *)GetDlgItem(IDC_EDIT);
update("本机IP地址:" + IP);
int res;
char msg[1024];

    while(1)
{
        if( (res = recv(sock, msg, 1024, 0)) == -1 )
{
dlg->update("失去连接");
break;
}
else
{
msg[res] = '\0';
dlg->update("client:" + CString(msg));
}
}
return TRUE;  // return TRUE unless you set the focus to a control
              // EXCEPTION: OCX Property Pages should return FALSE
}

------解决方案--------------------
if( (res = recv(sock, msg, 1024, 0)) == -1 )

recv 是阻塞的,这样的界面线程就挂起了,当然没有响应了,

开个线程收,或使用MFC 的 异步Socket类叫CAsync什么的
------解决方案--------------------
用非阻塞IO模型或者多线程吧
------解决方案--------------------
不在一个类里是可以的
--------------
还有,你的这里:
 if( (res = recv(sock, msg, 1024, 0)) == -1 )
sock有效么?
------解决方案--------------------
accept阻塞,你不会认为是死掉了吧??
------解决方案--------------------
这个我在上面声明了
引用:
不在一个类里是可以的
--------------
还有,你的这里:
 if( (res = recv(sock, msg, 1024, 0)) == -1 )
sock有效么?