首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2012-12-17 
求解,socket编程中的recv和accpet一定要在一个类吗?rt,我想做一个聊天软件,有一个主界面,里面有添加的好友

求解,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有效么?

热点排行