accept函数总是返回-1且非阻塞。
在循环中调用accept函数总是会获取到无效SOCKET句柄,而且是持续的获取,并非阻塞状态。客户端能够通过connect函数连接到服务器端,但是服务器端无响应。代码如下...
在循环中调用accept函数总是会获取到无效SOCKET句柄,而且是持续的获取,并非阻塞状态。
客户端能够通过connect函数连接到服务器端,但是服务器端无响应。
代码如下:(保留了主体部分)
30 SOCKET sListen = socket(AF_INET, SOCK_STREAM, 0);
31 if(sListen == INVALID_SOCKET)
32 {
33 cerr << "socket fail" << endl;
34 system("pause");
35 return 0;
36 }
37 sockaddr_in sa;
38 sa.sin_family = AF_INET;
39 sa.sin_port = htons(4567);
40 sa.sin_addr.S_un.S_addr = 0;
41 //绑定套接字
42 if(bind(sListen, (LPSOCKADDR)&sa, sizeof(sa)) == SOCKET_ERROR)
43 {
44 cerr << "bind fail!" << endl;
45 system("pause");
46 return 0;
47 }
48 if(listen(sListen, 2) == SOCKET_ERROR)
49 {
50 cerr << "listen error" << endl;
51 system("pause");
52 return 0;
53 }
54 sockaddr_in apt_sa;
55 int lengthofsa;
56 const char * szSendInfo = "ServerInfo, I hope You can see this";
57 SOCKET saccept;
58 while(1)
59 {
60 saccept = accept(sListen, (sockaddr *)&apt_sa, &lengthofsa);
61 if(saccept == INVALID_SOCKET)
62 {
63 cerr << "faild accept" << endl;
64 continue;
65 }
66 cout << "收到来自" << inet_ntoa(apt_sa.sin_addr) << "的链接" << endl;
67 send(saccept, "ServerInfo, I hope You can see this", strlen(szSendInfo), 0);
68 closesocket(saccept);
69 }
70 closesocket(sListen);
71 system("pause");
72 return 0;
73 } 展开
客户端能够通过connect函数连接到服务器端,但是服务器端无响应。
代码如下:(保留了主体部分)
30 SOCKET sListen = socket(AF_INET, SOCK_STREAM, 0);
31 if(sListen == INVALID_SOCKET)
32 {
33 cerr << "socket fail" << endl;
34 system("pause");
35 return 0;
36 }
37 sockaddr_in sa;
38 sa.sin_family = AF_INET;
39 sa.sin_port = htons(4567);
40 sa.sin_addr.S_un.S_addr = 0;
41 //绑定套接字
42 if(bind(sListen, (LPSOCKADDR)&sa, sizeof(sa)) == SOCKET_ERROR)
43 {
44 cerr << "bind fail!" << endl;
45 system("pause");
46 return 0;
47 }
48 if(listen(sListen, 2) == SOCKET_ERROR)
49 {
50 cerr << "listen error" << endl;
51 system("pause");
52 return 0;
53 }
54 sockaddr_in apt_sa;
55 int lengthofsa;
56 const char * szSendInfo = "ServerInfo, I hope You can see this";
57 SOCKET saccept;
58 while(1)
59 {
60 saccept = accept(sListen, (sockaddr *)&apt_sa, &lengthofsa);
61 if(saccept == INVALID_SOCKET)
62 {
63 cerr << "faild accept" << endl;
64 continue;
65 }
66 cout << "收到来自" << inet_ntoa(apt_sa.sin_addr) << "的链接" << endl;
67 send(saccept, "ServerInfo, I hope You can see this", strlen(szSendInfo), 0);
68 closesocket(saccept);
69 }
70 closesocket(sListen);
71 system("pause");
72 return 0;
73 } 展开
若以下回答无法解决问题,邀请你更新回答
推荐于2016-07-06
展开全部
函数失败了调用WSAGetLastError判断一下到底是什么错误,把错误码发出来一下啊,不然也不知道是什么问题;代码总体上是OK的~
追问
谢谢啊,这个代码错误还是很隐晦的,是我的accept函数的参数中长度那个参数未初始化,所以导致函数调用失败,从而返回一个失败的句柄。
这种2B错误,真要命啊~
追答
呵呵,确实是未初始化,大意了,我也没仔细看到,估计会返回一个参数无效的错误码吧~
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询