안녕하세요. 한창 삽질중인 신입입니다.
같은네트워크 상에 다른 장비[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();
}
//---------------------------------------------------------------------------
|