Vérifiez si le port TCP est disponible (pas à l'écoute ou connecté)
Je utiliser le code suivant pour vérifier si un port est disponible ou pas:
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;
}
Le problème est que si le port est ouvert, mais pas connecté à l'échec! Comment puis-je examiner facilement que le port est disponible (pas d'écoute, pas connecté)?
p. ex. port 21111 (sortie de la commande netstat) -> ma fonction ne reconnaît pas que le port n'est pas libre
TCP 0.0.0.0:21111 xxxxDUMMYxxxx:0 LISTENING
Thx
Comment allez-vous utiliser cette information? Si c'est pour trouver un port approprié et de l'ouvrir, la seule façon saine de faire est d'ouvrir le port et de réagir à des erreurs de l'époque. Rien d'autre a des problèmes de timing.
OriginalL'auteur leon22 | 2012-11-09
Vous devez vous connecter pour publier un commentaire.
Vous avez deux erreurs: La première est que, dans le
if
à la déclaration de attribuer zéro àresult
. L'autre est queconnect
retourne-1
en cas d'échec de connexion et un non-valeur négative si elle parvient à se connecter.Il y a aussi un problème que si vous arrivez à vous connecter, vous ne fermez pas cette connexion.
if (0 == result)
. Si vous faites une erreur de l'utilisation d'un signe égal, le compilateur va ramasser!OMG! J'ai oublié une simple égalité! Thx
OriginalL'auteur Some programmer dude
la ligne
client.sin_addr.S_un.S_addr = inet_addr(ipAddressStr);
ne peuvent pas travailler pour moi. modifier:OriginalL'auteur jamlee