我正在试验 C++ winsockets。我想创建一种方法,在不知道它的 IP 的情况下,我可以在网络上找到服务器。为此,我只需通过 IP 地址 192.168.1.0 到 192.168.1.255 循环我的连接方法。但是,每次连接之间的时间相当长,程序倾向于在 connect(nBytes, (sockaddr*)&server, sizeof(server)) 语句处等待至少 30 秒,如果不是更长的话。我的问题如下:为什么会发生这种情况,我该如何解决这个问题,是否有完全不同的更好的方法来查找服务器?
我的连接方法:
SOCKET connect(char *ipAdress)
{
WSAData wsaData;
if ((WSAStartup(MAKEWORD(2, 2), &wsaData)) == SOCKET_ERROR)
return errorReport("Could not create startup struct");
nBytes = socket(AF_INET, SOCK_STREAM, 0);
if (nBytes == SOCKET_ERROR)
return errorReport("Socket could not be created");
struct hostent *host_entry;
if ((host_entry = gethostbyname(ipAdress)) == NULL)
return errorReport("Cannot find server.");
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(1337);
server.sin_addr.s_addr = *(unsigned long*) host_entry->h_addr;
if (connect(nBytes, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR)
{
WSACleanup();
return errorReport("Failed to connect to server.");
}
if (nBytes == -1)
{
WSACleanup();
disconnect(nBytes);
return errorReport("Could not connect");
}
return 0;
}
另外,请随时告诉我我在当前连接方法中做错的任何事情。