为什么accept没有接到连接请求也返回了?

qqwweerraahh 2009-10-29 11:38:21
控制台下写的一个简单程序,accept会在接到连接请求时才返回
我用同样的方法用MFC写的程序,accept会立即返回?为什么啊?怎么让他在接到连接请求时再返回呢?
我没有设置阻塞或非阻塞模式


DWORD WINAPI ListenThread(LPVOID lpParameter)
{
HWND* hWnd=(HWND*)lpParameter;
SOCKET s=socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET==s)
{
MessageBox(NULL,"创建套接字失败",NULL,MB_OK);
return 0;
}
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(9999);
if(SOCKET_ERROR==bind(s,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)))
{
MessageBox(NULL,"绑定套接字失败",NULL,MB_OK);
return 0;
}
if(SOCKET_ERROR==listen(s,SOMAXCONN))
{
MessageBox(NULL,"设置监听模式失败",NULL,MB_OK);
return 0;
}
SOCKET sClt;
SOCKADDR_IN addrClt;
int siLen=sizeof(siLen);
char chBuf[1024];
while(TRUE)
{
sClt=accept(s,(SOCKADDR*)&addrClt,&siLen);
recv(sClt,chBuf,sizeof(chBuf),NULL);
::PostMessage(*hWnd,UI_CLTOL,0,(LPARAM)&addrClt);
}
return 0;
}
...全文
139 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqwweerraahh 2009-10-30
  • 打赏
  • 举报
回复
哈哈,被4楼发现啦
问题在这啦,改过来就OK啦
我太大意了!
谢谢大家啦

int siLen=sizeof(SOCKADDR);

skyworld2288 2009-10-30
  • 打赏
  • 举报
回复
2楼说的对,你应该判断下返回的是什么东西,或者是用WSAGetLastErro来检查错误。
skywoodsky 2009-10-30
  • 打赏
  • 举报
回复
使用WSAGetLastError检查错误原因
skywoodsky 2009-10-30
  • 打赏
  • 举报
回复
int siLen=sizeof(siLen);
???
skywoodsky 2009-10-30
  • 打赏
  • 举报
回复
不应该啊,你没设成异步模式的话,正常情况应该一直阻塞在accept才对
qqwweerraahh 2009-10-30
  • 打赏
  • 举报
回复
判断返回值就可以啦吗?
可是我改成这样也不行啊,CPU占用率很高,怎么解决啊?:

do
{
sClt=accept(s,(SOCKADDR*)&addrClt,&siLen);
}while(sClt==INVALID_SOCKET);
lin_style 2009-10-29
  • 打赏
  • 举报
回复
天。难道你不判断accept返回东西

18,356

社区成员

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

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