【发布时间】:2018-05-13 09:32:51
【问题描述】:
源代码:
bool Helper::connectToAComputer(char* destIpString, char* srcIpString)
{
int iResult = 0;
u_long iMode = 1;
SOCKET ConnectSocket = INVALID_SOCKET;
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET)
{
wprintf(L"socket function failed with error: %ld\n", WSAGetLastError());
//return NULL;
}
sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr(destIpString);
clientService.sin_port = htons(22223);
iResult = connect(ConnectSocket, (SOCKADDR *)& clientService, sizeof(clientService));
if (iResult == SOCKET_ERROR)
{
wprintf(L"connect function failed with error: %ld\n", WSAGetLastError());
}
closesocket(ConnectSocket);
return false;
}
我正在编写一个程序,它将检查所有本地 IP 地址以查看本地网络上的计算机或设备。我已经编写了这个连接到套接字的函数。
问题在于,当套接字尝试连接到不属于任何设备的 IP 时,程序只是停止并在连接线上等待。它可以连接到计算机拥有的 IP。我希望函数告诉我连接是否不成功,而不是只是挂起等待。
【问题讨论】:
-
TCP 无法在不等待超时的情况下判断该地址不可访问。不清楚你想从中得到什么。
-
我明白你的意思,谢谢你的回答。那么如何检查地址是否可达?
-
这不是一项简单的任务。您可以从 ICMP 和 ping 开始。但如果是远程主机 ICMP 可以被路由器阻止。最好使用nmap程序。
-
' 那么如何检查地址是否可达? - 尝试连接到它。没有好的选择。如果必要的 TCP 超时导致问题,请使用异步/重叠设计或多线程。
标签: c++ sockets networking ip