|
안녕하세요. 급히 해결해야 할 문제가 있어서 질문 드립니다.
TServerSocket을 통해서 TCP 접속을 하고 있습니다. 현재 이기종간의 접속을 하고 있는데,
Client쪽 Adapter가 오로지 전원 인가 즉시 접속(Connect)만 있고 접속해제(Disconnect)가
없습니다. 참고적으로 사용중인 Adapter는 Serial to TCP 에 사용되는 사용 제품입니다.
그러다보니, 자주 재접속하기때문에 시체 소켓들이 종종 생깁니다. 이 부분은 주기적으로
데이터를 뿌리면서 해결 했는데, 문제는 동시에 여러 Adapter를 통해서 Server Socket의
TCP 서비스를 제공하다 보면, 동시에 한 포트에 여러개의 Adapter가 물린다는 것이죠.
참고적으로 내용을 직관적으로 보실수 있도록 코드 및 실행화면을 알려 드립니다.
//---------------------------------------------------------------------------
void __fastcall TForm_Main::Timer1Timer(TObject *Sender)
{
// Check Logic
AnsiString Str;
Memo1->Lines->Clear();
Memo1->Lines->Add("Connected Socket");
Memo1->Lines->Add("----------------------------------------");
for (int i = 0; i < ServerSocket->Socket->ActiveConnections; i++)
{
Str = "Socket[";
Str += i;
Str += "] : IP -> ";
Str += ServerSocket->Socket->Connections[i]->RemoteAddress;
Str += ", Port -> ";
Str += ServerSocket->Socket->Connections[i]->RemotePort;
Memo1->Lines->Add(Str);
}
Memo1->Lines->Add("----------------------------------------");
Str = "Total ActiveConnections = ";
Str += ServerSocket->Socket->ActiveConnections;
Memo1->Lines->Add(Str);
}
//---------------------------------------------------------------------------
다음은 실행 화면입니다.
Connected Socket
----------------------------------------
Socket[0] : IP -> 152.149.138.14, Port -> 25058
Socket[1] : IP -> 152.149.138.23, Port -> 11433
Socket[2] : IP -> 152.149.138.2, Port -> 1772
Socket[3] : IP -> 152.149.138.13, Port -> 25058
Socket[4] : IP -> 152.149.138.20, Port -> 22289
Socket[5] : IP -> 152.149.138.2, Port -> 1773
-------------------------------------
Total ActiveConnections = 6
위에처럼 IP 152.149.138.13, 14번은 포트가 동시에 25058포트로 할당이
되었습니다. 현재 몇가지 테스트 중에 있는데, 혹시라도 경험있으신 분들의
조언을 얻고 싶어서 글을 올립니다. 실제 현 시스템에서는 IP당 하나의 접속
으로 제한되 있어서 접속된 IP를 가지고 소켓을 구분하면 가능하지만,
다른 방법으로 소켓의 포트 할당이 중복되는 현상을 해결할 수 있다면
알려 주시면 감사하겠습니다.
읽어 주셔서 감사합니다. 김 종 현 드림.
|