Q&A

  • [질문] 클라이언트로 메시지 보내기
서버 (S) 가 있고, 클라이언트 (C1, C2...Cn) 가 있습니다.

각각의 클라이언트에는 에이전트가 실행중입니다.

서버에서 임의의 시점에 각 클라이언트로 특정한 메시지를 보냅니다.

그러면 클라이언트의 에이전트가 서버에서 수신된 메시지를 받아서

클라이언트의 에이전트 프로그램은 특정한 이벤트를 실행하려고 합니다.

그리고 클라이언트에서 이벤트 처리가 완료되면 성공 및 실패 결과를 서버로 보내주려고 합니다.

결론은 서버와 클라이언트 간에 메시지를 주고 받는 방법을 알고자 합니다.
4  COMMENTS
  • Profile
    최용일 2009.09.25 00:28
    뭘 알려달라는것인지...

    서버에서도 접속한 클라이언트 정보들을 다 알고 있을테니까... 원하는 클라이언트로 메시지를 날려면 됩니다.
  • Profile
    cdrd 2009.09.25 00:34
    결론은 서버와 클라이언트 간에 메시지를 주고 받는 방법을 알고자 합니다.
  • Profile
    오경용 2009.09.25 00:43
    Indy 혹은 Socket

    -----------------------------------------------------------------
    Indy
    : IdTCPServer, IdTCPClient
    -----------------------------------------------------------------
    혹은
    -----------------------------------------------------------------
    Socket
    : ServerSocket, ClientSocket
    -----------------------------------------------------------------
  • Profile
    Crazy™ 2009.09.25 10:36
    델파이는 tcp/ip 통신으로 윗분이 언급한것처럼 얘네를 많이 쓰는것 같네요.
    Indy
    : IdTCPServer, IdTCPClient
    Socket
    : ServerSocket, ClientSocket

    늦은밤이라 대충만 적으니 양해바래요.

    indy경우엔
    서버단에 IdTCPServer.Execute 이벤트에서 메시지를 받고 주는것을 처리하면 됩니다.

    <!--CodeS-->
    //서버단
    //IdTCPServer 와 IdThreadMgrDefault 를 놓고...연결시키고..

    var
    cmd : String;

    procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
    var
    msg : String;
    begin
    //1. 특정시간에 onExecute 실행.
    //2. IdTCPServer1 Binding에 클라이언트 ip와 포트를 넣음.

    msg := '시작해';
    IdTCPServer1.Active := True;
    AThread.Connection.WriteBuffer(msg , SizeOf(msg ));

    end;

    procedure TForm1.IdTCPServer2Execute(AThread: TIdPeerThread);
    var
    msg : String;
    begin
    msg := msg := AThread.Connection.ReadLn;

    if copy(msg,1,1) <> '@' then
    begin
    cmd := '완료';
    end else begin
    cmd := '에러'; //다시요청을 하든가...로그를 남기든가..처리
    end;

    end;

    //클라이언트
    //IdTCPClient 를 놓고...
    procedure TForm1.Button1Click(Sender: TObject);
    var
    msg : String;
    begin
    IdTCPClient1.Host := '127.0.0.1';
    IdTCPClient1.Port := 1000;
    IdTCPClient1.Connect(-1);

    IdTCPClient1.ReadLn(msg);
    if copy(msg,1,1) <> '@' then
    begin
    cmd := '1번처리';
    end else begin
    cmd := '2번처리';
    end;

    .......

    msg := '성공';
    if IdTCPClient1.Connected then
    begin
    IdTCPClient1.WriteBuffer(msg , SizeOf(msg ));
    end;
    end;

    <!--CodeE-->

    처음에 서버에서 클라이언트로 요청을 하신다고 했는데, 클라이언트 아이피를 알아야 할거에요.
    다른 관련된 컴퍼넌트(log, watch..)등은 필요하신거 사용하심될거구, 접속된 클라이언트 수나, 로그남기기나 등등은 쉽게 구현하실 수 있으실거 같아서 패스.

    Socket은 해본적이 없었나? 모르겟네요 -_-기억도 안나고..
    그 외에도 RemoteDataModule 같은거를 쓴다든가, AdoConnection 을 쓰든가, SocketConnection 을 쓰든가 방법은 많습니다.
    이만 자야겠네요. 도저히 눈꺼풀이 너무 무겁습니다 ;;
  • profile cdrd
    2009/09/25 00:10
  • Views1249
    Likes0
    Comments4
    Reports0
  • Tag List
  • 목록으로