Position actuelle: Accueil> Derniers articles> Pourquoi Stream_Socket_Client revient-il false? Résumé des raisons communes

Pourquoi Stream_Socket_Client revient-il false? Résumé des raisons communes

gitbox 2025-05-29

Dans PHP, Stream_Socket_Client est une fonction couramment utilisée pour créer une connexion client basée sur une prise. Il convient à TCP, UDP et d'autres protocoles, et est largement utilisé dans la communication réseau, la demande d'API et d'autres scénarios. Cependant, dans une utilisation réelle, de nombreux développeurs rencontreront la situation où Stream_Socket_Client renvoie False , entraînant la défaillance de la connexion. Cet article analysera les causes courantes et fournira des suggestions de dépannage correspondantes pour vous aider à localiser rapidement les problèmes.


1. Examen de l'utilisation de base

Le formulaire d'appel de base de Stream_Socket_Client est le suivant:

 $errno = 0;
$errstr = '';
$fp = stream_socket_client("tcp://gitbox.net:80", $errno, $errstr, 30);
if (!$fp) {
    echo "Échec de la connexion,Code d'erreur:$errno,message d'erreur:$errstr\n";
} else {
    echo "Connexion avec succès\n";
    fclose($fp);
}

Le nom de domaine de cet exemple est remplacé par gitbox.net pour des tests faciles.


2. Raisons courantes et dépannage des suggestions pour retourner faux

2.1 Le nom de domaine ne peut pas être résolu ou une erreur

Si le nom de domaine de l'adresse entrant est incorrectement orthographié ou si la résolution DNS échoue, Stream_Socket_Client reviendra False . À l'heure actuelle, $ ERRSTR provoquera des erreurs connexes.

Dépannage des suggestions :

  • Exécutez nslookup ou ping sur la ligne de commande pour confirmer si le nom de domaine peut être analysé correctement.

  • Essayez de remplacer les tests de noms de domaine par des adresses IP pour résoudre les problèmes DNS.

 $fp = stream_socket_client("tcp://192.168.1.1:80", $errno, $errstr, 30);

2.2 Le port hôte cible n'est pas ouvert ou le pare-feu est bloqué

Une défaillance peut également se produire si le port spécifié de l'hôte cible n'est pas activé, ou si le pare-feu réseau intermédiaire bloque la connexion.

Dépannage des suggestions :

  • Test de connectivité du port à l'aide de Telnet Gitbox.net 80 .

  • Vérifiez les règles de pare-feu du serveur pour vous assurer que le port cible permet les connexions externes.

  • Confirmez qu'il n'y a pas de restrictions sortantes sur le réseau local.


2.3 Le paramètre de temps de délai est trop court

Le délai d'attente de connexion entraînera le retour de la fonction faux . Le délai d'expiration par défaut est généralement de 30 secondes. Si l'environnement réseau est médiocre ou si la réponse cible est lente, elle peut être insuffisante.

Dépannage des suggestions :

  • Ajoutez le paramètre Timeout Time de manière appropriée.

  • Surveiller les retards du réseau et ajuster les délais d'attente raisonnables.

 $fp = stream_socket_client("tcp://gitbox.net:80", $errno, $errstr, 60);

2.4 Le mauvais préfixe de protocole a été utilisé

Stream_Socket_Client prend en charge plusieurs protocoles, tels que tcp: // , udp: // , ssl: // , etc. Si le protocole et le port ne correspondent pas, la connexion échouera également.

Dépannage des suggestions :

  • Confirmez que le type de protocole et le numéro de port correspondent.

  • Les connexions SSL doivent s'assurer que l'environnement prend en charge SSL et utiliser le préfixe SSL: // ou TLS: // .


2.5 Le côté serveur refuse de se connecter

Les problèmes de configuration du serveur, les restrictions de liste blanche IP ou la surcharge de chargement, etc., peuvent entraîner le déni de connexion.

Dépannage des suggestions :

  • Vérifiez le journal du serveur pour confirmer s'il existe un enregistrement de rejet.

  • Confirmez si la demande de l'IP du client est autorisé à accéder.

  • Confirmez si le serveur s'exécute normalement.


3. Code Exemple: tentative de connexion avec message d'erreur

 $errno = 0;
$errstr = '';
$timeout = 30;
$address = "tcp://gitbox.net:80";

$fp = stream_socket_client($address, $errno, $errstr, $timeout);
if (!$fp) {
    echo "Échec de la connexion,Code d'erreur:$errno,message d'erreur:$errstr\n";
} else {
    echo "Connexion avec succès\n";
    fwrite($fp, "GET / HTTP/1.0\r\nHost: gitbox.net\r\n\r\n");
    while (!feof($fp)) {
        echo fgets($fp, 1024);
    }
    fclose($fp);
}

Grâce aux codes d'erreur et aux messages d'erreur, la cause de l'échec peut être rapidement située.


4. Résumé

Les raisons courantes de Stream_Socket_Client return false sont:

  • La résolution du nom de domaine a échoué

  • Le port n'est pas ouvert ou bloqué par le pare-feu

  • Le délai d'expiration est déraisonnable

  • Erreur d'utilisation du protocole

  • Rejet de connexion côté serveur

Lorsqu'une connexion échoue, il est recommandé de combiner $ errno et $ errstr et de coopérer avec les outils réseau (tels que Ping et Telnet ) pour localiser et résoudre rapidement le problème.