我在寫一個使用Winsock的服務器程序,它等待客戶端連接。該代碼是這樣的:accept()函數充當非阻塞
#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()'不起作用。你能告訴我有什麼問題嗎? – Faheem
@Faheem:看看錯誤代碼。有幾種可能的原因(例如,可能有東西已經在端口80上收聽)。 – NPE
看起來就是這樣的問題。當我將端口更改爲某個較大的值時,它可以正常工作。但是我必須使用80端口。這是一個必要的要求。 – Faheem