Q&A

  • (Indy) 디스커넥된 소켓의 포트번호를 알려면???
서버에는 4444, 9999 두개의 포트가 열려있습니다.
4444는 멧세지 전용 포트이고 9999는 화일전송을 위한 포트입니다.
연결이 끊길때 4444번 포트로 들어온넘이 끊긴건지 아님 9999번이 끊긴건지
어떻게 알아야 합니까 ㅠ.ㅠ

procedure TfrmServer.TCPServerDisconnect(AThread: TIdPeerThread);
var
I : Integer;
begin
For I := 0 To ClientList.Count - 1 do
   If AThread.Connection.Socket.Binding.PeerPort <> 9999 Then // 파일전송포트로 들어온것이 아니라면
   Begin
     If TLoginClient(ClientList.Items[I]).IP = AThread.Connection.Socket.Binding.PeerIP then
     Begin
       TLoginClient(ClientList.Items[I]).Free;
       ClientList.Delete(I);
     End;  //  If End
     Memo.Lines.add(AThread.Connection.Socket.Binding.PeerIP + '님이 접속을 끊었습니다..');
   End;
end;


AThread.Connection.Socket.Binding.PeerIP  요넘은 잘 받아오는데
AThread.Connection.Socket.Binding.PeerPort    요넘은 내용이 없더군요 ㅠ.ㅠ
1  COMMENTS
  • Profile
    조영근 2004.03.23 00:54
    procedure TfrmServer.TCPServerDisconnect(AThread: TIdPeerThread);
    var
      I, J : Integer;
    begin
      if AThread.Connection.Socket.Binding <> nil then
      Begin
        For I := 0 To ClientList.Count - 1 do
          If Thread_ID <> AThread.ThreadID Then // 파일전송포트로 들어온것이 아니라면
          Begin
            If TLoginClient(ClientList.Items[I]).IP = AThread.Connection.Socket.Binding.PeerIP then
            Begin
              TLoginClient(ClientList.Items[I]).Free;
              ClientList.Delete(I);
              Memo.Lines.add(AThread.Connection.Socket.Binding.PeerIP + '님이 접속을 끊었습니다..');

              For J := 0 to 8 do
              If AnsiReplaceStr(lstClientList.Items.Strings[J],'    접속중','') = AThread.Connection.Socket.Binding.PeerIP Then
                lstClientList.Items.Strings[J] := AnsiReplaceStr(lstClientList.Items.Strings[J],'    접속중','');

            End;
          End;
      End;
    end;


    컨넥션시에 쓰레드번호를 저장해서 종료시 비교한다음 구분을 해버렸습니다 ^^;;

    if AThread.Connection.Socket.Binding <> nil then 이것은 서버에서 클라이언트로
    화일전송시에는 NIL이 되더군요 그래서 넣은겁니다 ^^;;


    PS. 꼭 포트번호를 구분하려 한다면 문제가 되지만... ^^;