'원격 호스트에 의해 기존 연결이 강제로 닫혔습니다'오류를 수정하는 방법?

원격 컴퓨터는 물리적 인 존재가없는 컴퓨터입니다. 컴퓨터 네트워크를 통해서만 액세스 할 수 있습니다. 원격 호스트는 네트워크를 호스팅하는 컴퓨터이며 원격 컴퓨터를 호스팅하며 원격 클라이언트는 네트워크의 원격 클라이언트 사용자입니다. 이 기능은 많은 프로세스에 혁명을 가져 왔으며 앞으로도 큰 범위를 가지고 있습니다.

로컬 호스트 오류로 인해 기존 연결이 강제로 닫혔습니다.

그러나 최근 에는 원격 호스트 에 연결하려고 시도하는 동안 " 원격 호스트에 의해 기존 연결이 강제로 닫혔습니다 "라는 오류가보고되었습니다. 이 오류는 클라이언트와 서버 간의 소켓 연결에서 발생합니다. 이 기사에서는이 오류를 완전히 수정 하고이 오류를 발생시키는 이유를 알려줄 실용적인 솔루션을 제공합니다.

Windows에서 '기존 연결이 원격 호스트에 의해 강제로 닫혔습니다'오류의 원인은 무엇입니까?

여러 사용자로부터 수많은 보고서를받은 후 문제를 조사하기로 결정하고 해결을위한 일련의 솔루션을 고안했습니다. 또한 트리거 된 이유를 조사하여 아래에 나열했습니다.

  • TLS 1.1 / 1.0 사용법 : 응용 프로그램이 TLS 1.1 또는 TLS 1.0에서 실행중인 경우 감가 상각으로 인해이 오류가 발생할 수 있습니다. TLS 1.2는 애플리케이션이 사용하는 프로토콜을 선택할 때 사용하는 방법입니다.
  • 암호화 비활성화 : 컴퓨터에서 암호화가 비활성화 된 경우 TLS 1.2 사용을 방지하고 TLS 1.0에서 오류가 발생할 수 있습니다.
  • 소켓 구현 : 경우에 따라 특정 유형의 소켓 구현이 오류를 트리거합니다. “.NET”응용 프로그램의 일부 구현에 버그가 있으며이 오류가 발생할 수 있습니다.
  • 누락 된 코드 : Entity Framework를 사용하는 일부 사람들의 경우 오류가 발생하여 특정 코드 줄이 누락 된 것으로 관찰되었습니다.
  • 오래된 ".NET"프레임 워크 : ".NET"프레임 워크가 비활성화 된 경우이 오류가 발생할 수 있습니다. 특정 작업을 제대로 수행하려면“.NET”프레임 워크를 최신 버전으로 업데이트해야합니다.

이제 문제의 본질에 대한 기본적인 이해를 마쳤으므로 솔루션을 향해 나아가겠습니다. 충돌을 피하기 위해 제시된 순서대로 구현하십시오.

해결 방법 1 : 암호화 사용

컴퓨터에서 암호화가 비활성화 된 경우 TLS 1.2 사용이 금지됩니다. 따라서이 단계에서는 암호화를 사용하도록 설정합니다. 그에 대한:

  1. " Windows "+ " R "를 눌러 실행 프롬프트를 엽니 다.
  2. "regedit"입력하고 "Enter"를 누릅니다 .

    "Regedit"을 입력하고 "Enter"를 누릅니다
  3. 다음 주소로 이동
     HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ v4.0.3031 

    오른쪽 창에 " SchUseStrongCrypto "값이 없으면이 주소로 이동하십시오.

     HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ .NETFramework \ v4.0.30319 
  4. 오른쪽 창에서 " SchUseStrongCrypto "옵션을 두 번 클릭하고 값 데이터로 " 1 "을 입력하십시오.

    오른쪽 창에서 "SchUseStrongCrypto"값을 두 번 클릭하십시오.
  5. 확인 ”을 클릭하여 변경 사항을 저장하고 문제가 지속되는지 확인 하십시오.

해결 방법 2 : TLS 1.2 사용 강제

응용 프로그램이 TLS 1.2 대신 TLS 1.1 또는 TLS 1.0을 사용하도록 구성된 경우이 오류가 발생할 수 있습니다. 따라서이 단계에서는 TLS 1.2를 사용하도록 컴퓨터를 구성합니다. 그에 대한:

  1. 사이트의 루트로 이동하여 "global.asax" 파일을 마우스 오른쪽 버튼으로 클릭하십시오.
  2. 목록에서 " 코드 보기 "를 선택하십시오.
  3. " Application_Start "메소드가 있어야합니다. 해당 메소드에 다음 코드 행을 추가하십시오.
     if (ServicePointManager.SecurityProtocol.HasFlag (SecurityProtocolType.Tls12) == false) ServicePointManager. SecurityProtocol = ServicePointManager입니다. 보안 프로토콜 

    코드에 줄 추가
  4. 변경 사항을 저장 하고 문제가 지속되는지 확인 하십시오.

해결 방법 3 : 소켓 구현 변경

특정 소켓 구현에 버그 나 결함이 있으면이 오류가 발생할 수있는 응용 프로그램의 특정 요소가 제대로 작동하지 않을 수 있습니다. 따라서이 단계에서는 다른 구현을 사용하도록 구성합니다. 그에 대한:

  1. " public byte [] buffer = new byte [1024], public Socket socket; " StateObjec t "클래스가 있는지 확인하십시오 . “.
  2. Receive (Socket s) ”함수를 호출하고“ void ReceiveCallback (IAsyncResult ar) ”에서 다음 코드를 호출하십시오.
      SocketError errorCode ; int nBytesRec = socket . EndReceive ( ar, out errorCode ); if ( errorCode != SocketError . Success ) { nBytesRec = 0 ; } 
  3. 이 코드를 구현 한 후에도 문제가 지속되는지 확인하십시오.

해결 방법 4 : 명령 줄 추가 (Entity Framework에만 해당)

Entity Framework를 사용하는 경우 특정 코드 줄이 누락되었을 수 있습니다. 따라서이 단계에서는이 문제를 해결하기 위해 해당 코드 줄을 추가합니다. 그에 대한:

  1. .edmx ”파일을 열고 그 아래의“ .context.tt ”파일을여십시오.
  2. .context.cs ”파일을 열고 생성자에 다음 코드 줄을 추가하십시오
      public DBEntities () : base ( "name=DBEntities" ) { this . Configuration . ProxyCreationEnabled = false ; // ADD THIS LINE ! } 
  3. 이 코드 줄을 추가 한 후에도 문제가 지속되는지 확인하십시오.

해결 방법 5 : .NET Framework 업데이트

모든 것이 원활하게 작동하려면 최신 버전의“.NET”프레임 워크가 필요합니다. 따라서이 단계에서는 사이트에서 최신 버전을 다운로드하여 설치합니다. 그에 대한:

  1. 이 링크로 이동하여 설정을 다운로드하십시오.
  2. 설치 프로세스를 시작하려면 " .exe "파일을 실행하십시오.

    Microsoft에서 다운로드 한 실행 파일 실행
  3. 화면의 지시에 따라 컴퓨터에 응용 프로그램을 설치하십시오.
  4. 설치를 완료 한 후에도 문제가 지속되는지 확인 하십시오.

재미있는 기사