서버에는 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 요넘은 내용이 없더군요 ㅠ.ㅠ
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. 꼭 포트번호를 구분하려 한다면 문제가 되지만... ^^;