我使用以下代码来检查端口是否可用:
bool ClassA::CheckPortTCP(short int dwPort , char *ipAddressStr)
{
struct sockaddr_in client;
int sock;
client.sin_family = AF_INET;
client.sin_port = htons(dwPort);
client.sin_addr.S_un.S_addr = inet_addr(ipAddressStr);
sock = (int) socket(AF_INET, SOCK_STREAM, 0);
int result = connect(sock, (struct sockaddr *) &client,sizeof(client));
// change to result == 0 -> failure in writing code too quick ;-)
if (result = 0) return true; // port is active and used
else return false;
}
问题是如果端口打开但未连接,则检查失败!如何轻松检查端口是否可用(未侦听、未连接)?
例如端口 21111(netstat 的输出)-> 我的函数无法识别该端口不是空闲的
TCP 0.0.0.0:21111 xxxxDUMMYxxxx:0 LISTENING
Thx
你有两个错误:第一个是if
声明你assign零到result
。另一个是connect
回报-1
连接失败时为非负值,如果成功连接则为非负值。
还有一个问题是,如果您设法连接,则不会关闭该连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)