현재 위치: > 최신 기사 목록> 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 () 함수에서 "Connection 거부 된"오류가 발생하면 다음 단계를 해결하는 것이 좋습니다.

  • 서비스가 시작되고 올바른 포트가 청취되었는지 확인하십시오.

  • 방화벽 및 보안 그룹 규칙이 액세스 할 수 있는지 확인하십시오.

  • 연결의 도메인 이름과 포트가 올바른지 확인하십시오.

  • Telnet 또는 유사한 도구와 네트워크 연결을 테스트하십시오.

  • 코드에 오류 처리, 캡처 및 출력 오류 정보를 자세히 설명하십시오.

이렇게하면 문제가 신속하게 찾을 수 있으며 프로그램 실행에 영향을 미치는 "연결 거부"를 피할 수 있습니다.