accept()函数导致卡死

hk_wind 2010-12-04 09:37:11

WSADATA wsadata;
SOCKET server;
SOCKET client;
SOCKADDR_IN serveraddr;


void CServerDlg::OnOK()
{
// TODO: Add extra validation here
server = socket(AF_INET,SOCK_STREAM,0);
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(12345);
serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

bind(server,(SOCKADDR*)&serveraddr,sizeof(serveraddr));
listen(server,10);
while(true)
{
client=accept(server,0,0); }


}

怎么解决
...全文
1420 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
awain 2010-12-04
  • 打赏
  • 举报
回复
太巧了,我最近也在学这。楼主所需代码如下
把你OnOK()中那段循环改成

AfxBeginThread(Accept_Thread,this);/启动线程
UINT Accept_Thread(LPVOID lParam)
{
CXXDilog *dlg=(CXXDialog*)lParam;
while(true)
{
dlg->client=accept(dlg->server,0,0);
}
}
楼主可满意
hk_wind 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhaoze87 的回复:]
把监听连接的代码放在一个线程里面就不会出现你说的卡死现象了
[/Quote]
帮忙写下代码啊
hk_wind 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cjf_iceking 的回复:]
accpet在楼主中情况是会阻塞的;
你可以新建一个线程,去接收连接,这样主进程就不会阻塞在那里了。
[/Quote]
帮忙写下代码啊
hk_wind 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 q342210738 的回复:]
这样做肯定卡死的,需要再开一个线程,在线程函数里面

C/C++ code
while(true)
{
client=accept(server,0,0);
}



就不会卡死了~
[/Quote]怎么开 写下代码啊
  • 打赏
  • 举报
回复
accpet在楼主中情况是会阻塞的;
你可以新建一个线程,去接收连接,这样主进程就不会阻塞在那里了。
lyingbo 2010-12-04
  • 打赏
  • 举报
回复
这样做肯定卡死的,需要再开一个线程,在线程函数里面
while(true)
{
client=accept(server,0,0);
}


就不会卡死了~
小马喝水 2010-12-04
  • 打赏
  • 举报
回复
把监听连接的代码放在一个线程里面就不会出现你说的卡死现象了

18,361

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧