Q&A

  • Indy로 통신을 하고 있습니다..
서버는 한대이고 클라이언트는 여러대가 접속할 수 있도록 하려고 합니다.

그리고 어떠한 정해진 메시지를 주고 받게 되는데,
이 중간과정에서 오류가 생기면 클라이언트측에선 NAK를 보냅니다.

서버에서 NAK를 받으면 다시 같은 내용을 보내주게 됩니다.

그런데 모두에게 보내주는게 아니라 특정 IP를 가진 클라이언트에게만 전송하는데
어떻게해야하죠?

결론 : Server에 접속돼있는 특정 Client에만 메시지를 전송할 수 있는 방법.
1  COMMENTS
  • Profile
    최도선 2006.02.28 01:14
    A라는 곳에서 NAK를 받으면 A로 재전송하는지 전혀 다른 B라는 곳으로 재 전송하는지 모르겠습니다.
    A에서 받아서 A로 전송하면,
    <!--CodeS-->
    procedure FIdTCPServerExecute(AThread: TIdPeerThread);
      while AThread.Connection.Connected do begin
         AThread.Connection.ReadBuffer(Protocol, 1);
        if (Protocol=NAK) then
          FThread := AThread;
          AThread.Synchronize(ProcessNAKPacket);
        begin
        end;
      end;
    end;

    procedure ProcessNAKPacket;
    begin
      FThread.Connection.WriteLn('재전송');
    end;
    <!--CodeE-->
    A에서 NAK를 받으면 B라는 곳으로 보내려면
    <!--CodeS-->
    procedure ProcessNAKPacket;
    var
      aCount: Integer;
      List : TList;
      aIp : string;
    begin
      List := FIdtcpServer.Threads.LockList;
      try
        for aCount := 0 to List.Count -1 do
        begin
          try
            aIp := TIdPeerThread(List.Items[aCount]).Connection.Socket.Binding.IP;
            if aIp='192.168.1.1' then
              TIdPeerThread(List.Items[aCount]).Connection.WriteLn('재전송');
          except
            TIdPeerThread(List.Items[aCount]).Stop;
          end;
        end;
      finally
        FIdtcpServer.Threads.UnlockList;
      end;

    end;
    <!--CodeE-->
    Indy Demo에서 발췌했습니다.
    즐거운하루되세요 ^^;