|
void __fastcall TDataModuleComm::PCCheckTimerTimer(TObject *Sender)
{
TTimer *TimerCur = static_cast<TTimer *>(Sender);
/*
// 통상적으로 Client의 Host Port Number와 IP Address는 초기에 생성자 또는 Init 하는 부분에서
// 정의 해서 사용 하도록해야 간결합니다.
ClientSocketPC[TimerCur->Tag-1]->Host = FormRGBMtx->IPAdd[TimerCur->Tag-1];
if(ClientSocketPC[TimerCur->Tag-1]->Host != "" &&
ClientSocketPC[TimerCur->Tag-1]->Socket->Connected == false)
{
ClientSocketPC[TimerCur->Tag-1]->Active = true; <<-- 주기적으로 접속을 요청하는 루틴
}
*/
// 이렇게 수정
// Server의 PC가 꺼져 있거나 다른 이유에서 서버와 연결이 되지 않을 경우
// Client의 Active의 상태를 true를 설정 한다 하더라도 Server와 연결이 안되기 때문에
// 아래와 같이 사용 하면 될 듯 합니다.
if( ClientSocketPC[TimerCur->Tag-1]->Active == false)
{
ClientSocketPC[TimerCur->Tag-1]->Active = true;
}
if(ClientSocketPC[TimerCur->Tag-1]->Socket->Active == false)
{
화면에 오프표시
}
else
{
화면에 온표시
}
}
궁금이 님이 쓰신 글 :
: 9개의 클라이언트 소켓을 1초 단위로 각각 다른 컴퓨터 서버 소켓과 연결을 시도하고 체크 하는 프로그램을 짜고있습니다
:
: 아래 답변에 여러분이 도와주셔서
: 다른 에러들은 잡았는데 프로그램 실행 한 5분쯤 지나니 또 다음과 같은 에러가 ㅠㅠ
:
: 9개중에 제대로 통신하여 연결된 곳은 상관없는데
: 응답이 없는 IP 에 계속 커넥팅 요청을 해서 에러가 나는것 같습니다
:
: void __fastcall TDataModuleComm::PCCheckTimerTimer(TObject *Sender)
: {
: // PCCheckTimer->Enabled = false;
: TTimer *TimerCur = static_cast<TTimer *>(Sender);
:
: ClientSocketPC[TimerCur->Tag-1]->Host = FormRGBMtx->IPAdd[TimerCur->Tag-1];
:
: if (ClientSocketPC[TimerCur->Tag-1]->Host != "" && ClientSocketPC[TimerCur->Tag-1]->Socket->Connected == false) ClientSocketPC[TimerCur->Tag-1]->Active = true; <<-- 주기적으로 접속을 요청하는 루틴
:
: if (ClientSocketPC[TimerCur->Tag-1]->Socket->Connected == false) {
: 화면에 오프표시 }
: else{
: 화면에 온표시 }
:
: // PCCheckTimer->Enabled = true;
:
: }
:
: 타이머 한개로 for문으로 9개 클라이언트를 붙이는게 부하가 있을까 싶어 타이머를 9개 불러서 사용했습니다
: 근데 아래와 같은 에러는 당췌 ㅠㅠ
: 도와주세요~
|