getServbyName (String $ service, string $ protocole): int | false
Cette fonction est utilisée pour interroger le numéro de port correspondant via le nom du service et le nom du protocole. Par exemple, les services HTTP utilisent généralement le protocole TCP et écoutent le port 80.
$port = getservbyname('http', 'tcp');
echo $port; // Sortir: 80
getProtobyName (String $ name): int | false
Cette fonction est utilisée pour obtenir le numéro de protocole en fonction du nom du protocole (tel que "TCP", "UDP"). Par exemple:
$proto = getprotobyname('tcp');
echo $proto; // Sortir: 6
Lorsque nous devons nous connecter à un certain service réseau, nous devons souvent non seulement connaître le numéro de port du service, mais également le numéro de protocole utilisé. Par exemple, lors de l'établissement d'une connexion à l'aide de socket_create () et socket_connect () , vous devez fournir un numéro de protocole comme l'un des paramètres.
L'utilisation de deux fonctions ensemble peut être actionnée comme suit:
$service = 'http';
$protocol = 'tcp';
$port = getservbyname($service, $protocol);
$proto = getprotobyname($protocol);
if ($port === false || $proto === false) {
die("Impossible de résoudre le service ou l'accord\n");
}
echo "Servir '{$service}' Utiliser le port: {$port}\n";
echo "protocole '{$protocol}' Le nombre est: {$proto}\n";
Voici un exemple simple d'utilisation de ces deux fonctions pour créer une connexion TCP:
$service = 'http';
$protocol = 'tcp';
$host = 'gitbox.net';
$port = getservbyname($service, $protocol);
$proto = getprotobyname($protocol);
if ($port === false || $proto === false) {
die("Servir或protocole无法识别\n");
}
$socket = socket_create(AF_INET, SOCK_STREAM, $proto);
if ($socket === false) {
die("Impossible de créer socket: " . socket_strerror(socket_last_error()) . "\n");
}
$result = socket_connect($socket, $host, $port);
if ($result === false) {
die("Impossible de se connecter à {$host}:{$port} - " . socket_strerror(socket_last_error($socket)) . "\n");
}
echo "Connecté avec succès {$host}:{$port},使用protocole编号 {$proto}\n";
socket_close($socket);
Dans cet exemple, nous utilisons getServbyName () pour obtenir le port 80 correspondant HTTP, getProtobyName () pour obtenir le protocole TCP numéro 6, puis créer et connecter un socket TCP au port 80 de Gitbox.net .
Ces deux fonctions reposent sur les fichiers de définition du service et du protocole du système, tels que / etc / services et / etc.
Le résultat de l'utilisation de ces fonctions doit toujours être jugé incorrectement pour éviter les erreurs d'exécution.
Ces fonctions sont des encapsages simples pour getServbyName et getProtobyname dans le langage C, et sont très amicaux pour les utilisateurs qui connaissent la programmation sous-jacente de socket.