문제

vs 2008

아래 코드를 사용하여 클라이언트가 SIP 서버에 연결할 수 있는지 감지하고 있습니다. 이것은 잘 작동했습니다. 그러나 클라이언트가 네트워크를 변경했으며 이제 내 응용 프로그램은 프록시 서버 뒤에서 SIP 서버에 연결해야합니다.

내가 얻는 오류는 다음과 같습니다.

"연결된 당사자가 일정 시간이 지나면 연결된 당사자가 올바르게 응답하지 않았거나 연결된 연결이 실패했기 때문에 연결 시도가 실패했습니다. 연결된 호스트가 xxx.xxx.xx.xx : xx에 응답하지 않았기 때문에 연결이 실패했습니다."

이 코드는 프록시 서버 뒤에서 연결해야 할 때까지 정상적으로 작동했습니다.

프록시 주소를 소켓에 추가 할 수있는 속성을 볼 수 없었습니다.

내가 뭔가를 놓치고 있습니까?

제안에 감사드립니다.

public bool IsSIPServerAvailable()
{
    bool isAvailable = true;
    Socket sock = new Socket(AddressFamily.InterNetwork,
                             SocketType.Stream,
                             ProtocolType.Tcp);

    try
    {
        sock.Connect("xxx.xxx.xx.xx", xx);
    }
    catch (SocketException ex)
    {
        Console.WriteLine(ex.Message);
        isAvailable = false;
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
        isAvailable = false;
    }
    finally
    {
        if (sock.Connected)
        {
            sock.Close();
        }
    }

    return isAvailable;
}
도움이 되었습니까?

해결책

내 대답을 참조하십시오 여기, 아마도 도움이 될 것입니다. 일반적인 아이디어는 먼저 프록시와의 연결을 설정 한 다음 HTTP Connect 명령을 사용하여 주어진 호스트 및 포트에 다른 TCP 연결을 엽니 다.

다른 팁

이것은 이것과 매우 유사합니다 의문. 프록시 서버를 통해 소켓 연결을 만들 수 있다고 생각하지 않습니다. 당신은 일종의 프로토콜이 필요하고, 더 많은 시간이 필요합니다. 일반적으로 관리자는 표준 HTTP, HTTPS 이외의 포트에서 연결을 거부하기 위해 프록시 서버를 설정합니다.

한 가지 해결책은 HTTP를 통해 터널링을 사용하는 것입니다.

프록시의 전체 아이디어는 응용 프로그램을 변경하지 않고 네트워크 토폴로지를 변경하는 것입니다. 따라서 앱을 변경할 필요가 없지만 프록시 구성/설정에는 변경이 필요합니다.

응용 프로그램과 독립적으로 프록시 구성을 확인하려면 사용할 수 있습니다. Telnet Host Port 동일한 타임 아웃/오류 메시지가 발생하는지 또는 몇자를 입력 한 후 연결이 끊어 졌는지 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top