GetServyName (String $ Service, String $ Protocol): int | false
Diese Funktion wird verwendet, um die entsprechende Portnummer über den Dienstnamen und den Protokollnamen abzufragen. Beispielsweise verwenden HTTP -Dienste das TCP -Protokoll in der Regel und hören Sie Port 80 an.
$port = getservbyname('http', 'tcp');
echo $port; // Ausgabe: 80
GetProtobyname (String $ Name): int | false
Diese Funktion wird verwendet, um die Protokollnummer gemäß dem Protokollnamen (z. B. "TCP", "UDP") zu erhalten. Zum Beispiel:
$proto = getprotobyname('tcp');
echo $proto; // Ausgabe: 6
Wenn wir eine Verbindung zu einem bestimmten Netzwerkdienst herstellen müssen, müssen wir häufig nicht nur die Portnummer des Dienstes, sondern auch die verwendete Protokollnummer kennen. Wenn Sie beispielsweise eine Verbindung mit socket_create () und socket_connect () herstellen, müssen Sie eine Protokollnummer als einen der Parameter bereitstellen.
Die Verwendung von zwei gemeinsamen Funktionen kann wie folgt betrieben werden:
$service = 'http';
$protocol = 'tcp';
$port = getservbyname($service, $protocol);
$proto = getprotobyname($protocol);
if ($port === false || $proto === false) {
die("Service oder Vereinbarung nicht beheben\n");
}
echo "Aufschlag '{$service}' Verwenden Sie Port: {$port}\n";
echo "Protokoll '{$protocol}' Die Zahl ist: {$proto}\n";
Hier ist ein einfaches Beispiel für die Verwendung dieser beiden Funktionen, um eine TCP -Verbindung zu erstellen:
$service = 'http';
$protocol = 'tcp';
$host = 'gitbox.net';
$port = getservbyname($service, $protocol);
$proto = getprotobyname($protocol);
if ($port === false || $proto === false) {
die("Aufschlag或Protokoll无法识别\n");
}
$socket = socket_create(AF_INET, SOCK_STREAM, $proto);
if ($socket === false) {
die("Nicht erstellen können socket: " . socket_strerror(socket_last_error()) . "\n");
}
$result = socket_connect($socket, $host, $port);
if ($result === false) {
die("Es kann keine Verbindung zu herstellen können {$host}:{$port} - " . socket_strerror(socket_last_error($socket)) . "\n");
}
echo "Mit erfolgreich verbunden {$host}:{$port},使用Protokoll编号 {$proto}\n";
socket_close($socket);
In diesem Beispiel verwenden wir GetServyName () , um den entsprechenden HTTP -Port 80 zu erhalten, GetProtobyname (), um die TCP -Protokollnummer 6 zu erhalten und dann einen TCP -Socket an Port 80 von gitbox.net zu erstellen und zu verbinden.
Diese beiden Funktionen stützen sich auf die Service- und Protokolldefinitionsdateien des Systems wie /etc /dienste und /etc /Protokolle , die zu einem Parsing -Fehler führen können, wenn die Definition unvollständig ist.
Das Ergebnis der Verwendung dieser Funktionen sollte immer falsch beurteilt werden, um Laufzeitfehler zu vermeiden.
Diese Funktionen sind einfache Inkapsulationen für GetServyName und GetProtobyname in C -Sprache und sind für Benutzer, die mit der zugrunde liegenden Socket -Programmierung vertraut sind, sehr freundlich.