문제

TCP 서버를 설정하는 데 사용하는 코드입니다.

    internal void Initialize(int port,string IP)
    {
        IPEndPoint _Point = new IPEndPoint(IPAddress.Parse(IP), port);
        Socket _Accpt = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        try
        {
            _Accpt.Bind(_Point);
        }
        catch (SocketException exc)
        {
            System.Windows.Forms.MessageBox.Show(exc.Message);

        }
        finally
        {
            _Accpt.Listen(2); //Second exception is here after the code continues after the catch block
            _Accpt.BeginAccept(null, 0, new AsyncCallback(Accept), _Accpt);
        }
    }

동일한 대상에서 BIND를 호출하면 포트가 이미 사용 중이므로 예외가 발생합니다. 따라서 해당 기능을 두 번 호출 할 때 해당 예외가 발생합니다.

문제 - CATCH {} 문 후 코드는 예외를 잡았음에도 불구하고 코드가 계속 마침내 {}를 따릅니다. 왜 그런 일이 발생합니까? MessageBox 이후에 기능을 종료하기를 원합니다. "return"으로 시도했지만 여전히 마지막으로 {} 블록을 따릅니다.

도움이 되었습니까?

해결책

예외가 발생했거나 방법이 시도/캐치 블록 내에서 종료되었는지 여부에 관계없이 최종 블록은 항상 실행됩니다.

다른 팁

마지막으로 블록은 시도 블록의 성공 여부에 관계없이 실행 해야하는 코드를 넣는 곳입니다. 객체를 처리 할 수있는 "정리"코드를 넣는 곳입니다.

따라서이 코드가 일어난 일에 관계없이 실행되는 것은 부정확합니다. 아마도 바인드가 좋을 때만 실행하기를 원한다면 해당 코드를 시도 블록으로 이동해야 할 수도 있습니다.

이 페이지를 확인하십시오 ...

http://msdn.microsoft.com/en-us/library/6dekhbbc(vs.80).aspx

... 이것이 어떻게 작동하는지에 대한 자세한 내용.

샘플 시도/캐치/마침내 다음 (필수 독서에 있어야하는 C#을 통해 Jeffery Richter의 CLR에서 가져온) ...

FileStream fs = null;

try
{
  fs = new FileStream(...)

  // process the data

}
catch (IOException)
{
  // inside this catch block is where you put code that recovers
  // from an IOException
}
finally
{
  // make sure the file gets closed
  if (fs != null) fs.Close();
}

다른 사람들이 지적했듯이 finally 블록은 예외에 관계없이 항상 발생합니다.

코드를 변경하십시오

    try
    {
        _Accpt.Bind(_Point);
        _Accpt.Listen(2); //Second exception is here after the code continues after the catch block
        _Accpt.BeginAccept(null, 0, new AsyncCallback(Accept), _Accpt);
    }
    catch (SocketException exc)
    {
        System.Windows.Forms.MessageBox.Show(exc.Message);

    }
    finally
    {
        //Final logging
        //Disposal of initial objects etc...
    }

모든 아이디어 finally 항상 실행됩니다 - 예외 또는 예외가 없습니다. 정리 등을 사용하십시오.

마지막으로 블록은 항상 실행됩니다. 그것이 마침내의 요점입니다.

'마침내'에있는 라인이 시도에 속한 것처럼 들리나요?

마지막으로 항상 실행됩니다.

예외를 던진 코드 행 후에 존재하는 코드 만 예외를 잡을 수있는 캐치 예외가 발생할 때까지 실행되지 않습니다.

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