Q&A

  • <조언부탁합니다> 소켓어러시 처리방법(에러코드는 10053,10054,10061 등)


- 클라이언트와 서버소켓을 각각 따로 두고 프로그램을 작성한후!



서버프로그램을 먼저 기동시키고,



클라이언트 프로그램을 기동 시켰습니다.



그러나 정산적인 경우에는 해당이 없는데, 예를 들어 클라이언트(소켓)가 비정상적



으로 종료 되었을때, 10053,10054 혹은 10061 같은 에러 메시지가 나옵니다.



이것을 해결할 방법은 없읍니까?



그리고 자세한 조언부탁드립니다.









3  COMMENTS
  • Profile
    이경문 2000.07.04 22:13
    델파이에서 제공하는 TClientSocket과 TServerSocket은 사용에 있어서 주의를 요합니다.

    해당하는 에러들은 흔히 네트워킹 프로그램을 작성할 때 흔히 발생하는 에러들이지요.

    10061은 ServerSocket이 열려 있지 않은 상태이거나

    ClientSocket의 Address 및 Port의 설정이 잘못 되어 있는 상황에서 발생하는 에러입니다.

    10053이나 10054는 한쪽에서는 데이터를 보내고 있는 중에

    다른 한쪽의 프로그램이 그냥 종료될 때 발생하는 에러입니다.

    그러므로 프로그램에서는 항상 TCP/IP 통신이 종료되었음을 확인하고 종료하는 방법을 써야 합니다.



    예제를 들면 OnCloseQuery Event에서

    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

    begin

    if ClientSocket1.Active then

    begin

    ClientSocket1.Close;

    CanClose := false;

    ShowMesage('한번 더 누르시면 종료됩니다');

    end;

    end;



    다른 예제로는 OnClose Event에서

    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

    begin

    if ClientSocket1.Active then

    begin

    ClientSocket1.Close;

    while CliektSockte1.Active do

    Application.ProcessMessages;

    end;

    end;



    등과 같이 하셔야 하고 ServerSocket도 ClientSocket같은 방법을 사용하면 됩니다.

    단 ServerSocket1.Socket.ActiveConnections가 0임을 확인하야 겠지요.

  • Profile
    김승일 2000.09.01 20:29
    많은 도움이 됐습니다..

  • Profile
    홍기원 2000.07.05 01:21
    이경문 wrote:

    > 델파이에서 제공하는 TClientSocket과 TServerSocket은 사용에 있어서 주의를 요합니다.

    > 해당하는 에러들은 흔히 네트워킹 프로그램을 작성할 때 흔히 발생하는 에러들이지요.

    > 10061은 ServerSocket이 열려 있지 않은 상태이거나

    > ClientSocket의 Address 및 Port의 설정이 잘못 되어 있는 상황에서 발생하는 에러입니다.

    > 10053이나 10054는 한쪽에서는 데이터를 보내고 있는 중에

    > 다른 한쪽의 프로그램이 그냥 종료될 때 발생하는 에러입니다.

    > 그러므로 프로그램에서는 항상 TCP/IP 통신이 종료되었음을 확인하고 종료하는 방법을 써야 합니다.

    >

    > 예제를 들면 OnCloseQuery Event에서

    > procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

    > begin

    > if ClientSocket1.Active then

    > begin

    > ClientSocket1.Close;

    > CanClose := false;

    > ShowMesage('한번 더 누르시면 종료됩니다');

    > end;

    > end;

    >

    > 다른 예제로는 OnClose Event에서

    > procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

    > begin

    > if ClientSocket1.Active then

    > begin

    > ClientSocket1.Close;

    > while CliektSockte1.Active do

    > Application.ProcessMessages;

    > end;

    > end;

    >

    > 등과 같이 하셔야 하고 ServerSocket도 ClientSocket같은 방법을 사용하면 됩니다.

    > 단 ServerSocket1.Socket.ActiveConnections가 0임을 확인하야 겠지요.