我正在使用Winsock编写服务器程序,以等待客户端连接。代码是这样的:
#include <winsock.h>
#pragma comment(lib, "wsock32.lib")
WSADATA wsaData;
WSAStartup(0x101, &wsaData);
SOCKET listeningSocket;
listeningSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN serverInfo;
serverInfo.sin_family = AF_INET;
serverInfo.sin_addr.s_addr = INADDR_ANY;
serverInfo.sin_port = htons(80);
bind(listeningSocket, (LPSOCKADDR)&serverInfo, sizeof(struct sockaddr));
listen(listeningSocket, 5);
SOCKET theClient;
while(true)
{
theClient = accept(listeningSocket,NULL,NULL);
....
recv(theClient,Message,strlen(Message),0);
....
....
}
我遇到的问题是服务器不等待客户端,而是在accept()函数之后继续执行。具体来说,accept()函数不会阻止执行。
最佳答案
您应该检查所有库函数的返回值。可能是早期调用(例如bind()
)失败了,但是由于您忽略了返回值,因此您从未发现。