我正在使用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())失败了,但是由于您忽略了返回值,因此您从未发现。

08-16 00:20