我正在试验 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;
}
此外,如果我在当前连接方法中做错了什么,请随时告诉我。
最佳答案
长时间的延迟是由于套接字在返回给调用者之前需要超时造成的。为了减少总执行时间,您应该让多个工作线程同时连接到单独的 IP 地址。
关于c++ - 如何在 C++ 中进行网络 IP 扫描?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/558610/