getServbyName(String $ service、string $ protocol):int | false
この関数は、サービス名とプロトコル名を介して対応するポート番号を照会するために使用されます。たとえば、HTTPサービスは通常、TCPプロトコルを使用してポート80を聴きます。
$port = getservbyname('http', 'tcp');
echo $port; // 出力: 80
getProtobyname(String $ name):int | false
この関数は、プロトコル名(「TCP」、「UDP」など)に従ってプロトコル番号を取得するために使用されます。例えば:
$proto = getprotobyname('tcp');
echo $proto; // 出力: 6
特定のネットワークサービスに接続する必要がある場合、サービスのポート番号だけでなく、使用されるプロトコル番号も知る必要があることがよくあります。たとえば、 socket_create()とsocket_connect()を使用して接続を確立する場合、パラメーターの1つとしてプロトコル番号を提供する必要があります。
2つの機能を一緒に使用すると、次のように動作できます。
$service = 'http';
$protocol = 'tcp';
$port = getservbyname($service, $protocol);
$proto = getprotobyname($protocol);
if ($port === false || $proto === false) {
die("サービスまたは合意を解決できません\n");
}
echo "仕える '{$service}' ポートを使用します: {$port}\n";
echo "プロトコル '{$protocol}' 数はです: {$proto}\n";
これらの2つの関数を使用してTCP接続を作成する簡単な例を次に示します。
$service = 'http';
$protocol = 'tcp';
$host = 'gitbox.net';
$port = getservbyname($service, $protocol);
$proto = getprotobyname($protocol);
if ($port === false || $proto === false) {
die("仕える或プロトコル无法识别\n");
}
$socket = socket_create(AF_INET, SOCK_STREAM, $proto);
if ($socket === false) {
die("作成できません socket: " . socket_strerror(socket_last_error()) . "\n");
}
$result = socket_connect($socket, $host, $port);
if ($result === false) {
die("接続できません {$host}:{$port} - " . socket_strerror(socket_last_error($socket)) . "\n");
}
echo "正常に接続されています {$host}:{$port},使用プロトコル编号 {$proto}\n";
socket_close($socket);
この例では、 GetServbyName()を使用して、HTTP対応するポート80、 GetProtoByname()を取得してTCPプロトコル番号6を取得し、TCPソケットをgitbox.netのポート80に作成して接続します。
これらの2つの機能は、 /etc /servicesや/etc /protocolなどのシステムのサービスとプロトコル定義ファイルに依存しているため、定義が不完全な場合は解析障害を引き起こす可能性があります。
これらの機能を使用した結果は、ランタイムエラーを避けるために常に誤って判断する必要があります。
これらの機能は、C言語のGetServbyNameとGetProtobynameの単純なカプセルであり、基礎となるソケットプログラミングに精通しているユーザーに非常に友好的です。