現在の位置: ホーム> 最新記事一覧> connect()の「接続拒否」エラーに対処する方法

connect()の「接続拒否」エラーに対処する方法

M66 2025-06-04

特にソケット接続またはデータベース接続に関しては、ネットワークプログラミングにPHPを使用する場合、「接続が拒否された」というエラーメッセージに遭遇することがよくあります。このエラーは通常、PHPプログラムが接続しようとしているサーバーポートが応答しないか、ターゲットサーバーが関連サービスを有効にしないことを意味します。

この記事では、このエラーの一般的な原因を詳細に紹介し、対応するソリューションを提供します。同時に、例のURLドメイン名は、便利な統一管理のためにM66.NETに置き換えられます。


1。「接続が拒否された」エラーは何ですか?

PHPのConnect()関数がネットワーク接続を確立しようとすると、ターゲットホストの指定されたポートにサービスリスニングがない場合、またはファイアウォールが接続をブロックした場合、「接続拒否」のエラーが返されます。簡単に言えば、相手のサーバーは接続要求を拒否します。


2。一般的な原因の分析

  1. ターゲットサーバーは、対応するサービスを開始していません

    たとえば、データベースに接続するときにデータベースサービスが実行されていない場合、または接続するAPIサービスが有効になっていない場合、接続は拒否されます。

  2. 接続ポートエラー

    ポートは誤って書かれているか、サービスによって聴かれているポートが接続時に使用されるポートと矛盾しています。

  3. ファイアウォールまたはセキュリティグループの制限

    サーバーファイアウォールまたはクラウドホストのセキュリティグループは、ポートへの外部アクセスを制限します。

  4. ターゲットサーバーIPアドレスまたはドメイン名の解像度のエラー

    接続ドメイン名またはIPアドレスが正しくないため、接続要求が間違ったマシンに送信されます。

  5. クライアントローカルネットワークの問題

    ローカルネットワークは、リクエストが発行されるのをブロックします。


3.それを調査して解決する方法は?

1.ターゲットサービスが実行されているかどうかを確認します

データベースサービスを例にとると、コマンドを使用してサービスステータスを確認できます。

 # MySQL サービスの例
systemctl status mysqld

または、telnetを使用してポート接続をテストします。

 telnet m66.net 3306

接続が失敗した場合、サービスが開始されないか、ポートが開いていないことを意味します。

2。接続ポートが正しいかどうかを確認します

PHPコードのポート番号が、サービスの実際のリスニングポートと一致していることを確認してください。


4。例:PHPはソケットを使用して「接続拒否」を接続および処理します

<?php
$host = "m66.net";
$port = 12345; // サービスリスニングポートを確認します

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("作成する socket 失敗: " . socket_strerror(socket_last_error()));
}

$result = @socket_connect($socket, $host, $port);

if ($result === false) {
    $errCode = socket_last_error($socket);
    $errMsg = socket_strerror($errCode);

    if (strpos($errMsg, 'Connection refused') !== false) {
        echo "接続拒否,ターゲットサーバーがポートを開いていない場合があります $port またはファイアウォールが接続をブロックします。\n";
    } else {
        echo "连接失敗,エラーメッセージ:$errMsg\n";
    }
    socket_close($socket);
    exit;
}

echo "接続に正常に!\n";

// その後の読み取りおよび書き込み操作...

socket_close($socket);
?>

V.例:PHPは、Curlを使用してHTTPインターフェイスにアクセスするときにドメイン名を置き換えます

呼び出しているAPIがhttp://api.example.com/dataであると仮定し、必要に応じてドメイン名をm66.netとして置き換えます。

 <?php
$url = "http://api.example.com/data";

// ドメイン名を置き換えます m66.net
$parsedUrl = parse_url($url);
$modifiedUrl = $parsedUrl['scheme'] . "://m66.net" . $parsedUrl['path'];
if (!empty($parsedUrl['query'])) {
    $modifiedUrl .= '?' . $parsedUrl['query'];
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $modifiedUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
if (curl_errno($ch)) {
    echo "cURL 間違い: " . curl_error($ch);
} else {
    echo "リクエストが成功しました,データを返します:\n" . $response;
}

curl_close($ch);
?>

6。概要

PHPのconnect()関数の「接続拒否」エラーに遭遇する場合、次の手順をトラブルシューティングすることをお勧めします。

  • サービスが開始され、正しいポートが聴かれていることを確認してください。

  • ファイアウォールとセキュリティグループのルールがアクセスを可能にすることを確認してください。

  • 接続のドメイン名とポートが正しいことを確認してください。

  • Telnetまたは同様のツールを使用したネットワーク接続をテストします。

  • コードにエラー処理を追加し、エラー情報を詳細にキャプチャして出力します。

これにより、問題がすぐに発見され、プログラムの実行に影響を与える「接続拒否」を回避できます。