주기적으로 SNMP 패킷을 보내서 상대방이 살아있는지 확인하시면 됩니다.
만약 정해진 시간내에 응답 패킷이 오지 않는다면 상대방과의 소켓 연결을 종료하면 되겠죠.
newrise 님이 쓰신 글 :
: 안녕하세요. 한창 삽질중인 신입입니다.
:
: 같은네트워크 상에 다른 장비[Server] -- PC[Client]프로그램
: 위와 같은 구성이고
: PC 프로그램에서 다른 장비에 붙어서 데이터를 주고 받는 프로그램을 짜고 있습니다.
:
: 서버쪽에서 일반적인 종료[정상적으로 연결 끊기]시 Timer를 통해 다시 연결을 시도합니다.
: 하지만, 랜선 뽑기, 서버쪽 전원 OFF 시에는 프로그램이 인지를 못하고 있습니다.
:
: Q. Errorcode로 처리가 불가능한지 알고 싶습니다. 만약 방법이 없다면 어떤 방법이 효율적인지
: 배우고 싶습니다.
:
: void __fastcall TForm2::Timer2Timer(TObject *Sender)
: {
: char tmp_buf[1024];
: char msg_buf[20];
: int size = 0;
: int i=0;
:
: if(COM_FLAG)
: {
: btn_Connect->Caption = "연결중";
: ClientSocket1->Address = P_IP;
: ClientSocket1->Port = P_PORT;
: ClientSocket1->Open();
:
: }
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm2::ClientSocket1Connect(TObject *Sender,
: TCustomWinSocket *Socket)
: {
: btn_Connect->Caption = "Conneted OK";
: TCP_Count = 1;
: COM_FLAG = 0;
:
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm2::ClientSocket1Disconnect(TObject *Sender,
: TCustomWinSocket *Socket)
: {
: btn_Connect->Caption = "Disconnected";
: TCP_Count = 0;
: AP_COM_FLAG = 1;
:
: //reconnetion_count = 1;
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm2::ClientSocket1Error(TObject *Sender,
: TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
: {
: // 클라이언트가 열려 있지 않은 서버 소켓에 대해 접속 시도하여도 에러 메시지창 표출 하지 않음
: btn_Connect->Caption = "Disconnected";
: TCP_Count = 0;
: COM_FLAG = 1;
:
: TClientSocket *SocketCur = static_cast<TClientSocket *>(Sender);
:
: if (ErrorCode == 10060) ErrorCode = 0;
: if (ErrorCode == 10061) ErrorCode = 0;
: if (ErrorCode == 10049) ErrorCode = 0;
: if (ErrorCode == 10053) ErrorCode = 0;
: if (ErrorCode == 10038) ErrorCode = 0;
: if (ErrorCode == 10065) ErrorCode = 0;
:
: //SocketCur->Socket->Disconnect(SocketCur->Socket->SocketHandle);
: SocketCur->Active = false;
: SocketCur->Socket->Close();
:
: }
: //---------------------------------------------------------------------------
|