[Delphi] 델파이 Datasnap 서버 클라이언트 통신 방법

    728x90

    안녕하세요

    로로봉입니다 : )

    이번에는 델파이 Datasnap 통신방법에 대해 알아보도록 하겠습니다.

    데이터 스냅 서버의 접속 방법은 간단합니다.

    TFDConnection 컴포넌트의 DriverID를 ‘DS’로 설정해주면 됩니다.

    IP 주소는 Server에 입력하고 사용 포트는 Port 파라미터로 입력하면 됩니다.

    테스트로 192.168.0.100 서버가 있다고 가정하고 아래와 같이 접속합니다.

    Con.Params.Clear;
    Con.Params.DriverID := 'DS';
    Con.Params.Append('Server=192.168.0.100');
    Con.Params.Append('Port=9091');
    Con.Params.Append('LoginTimeout=2000');
    Con.Connected := True;

    서버에 있는 함수를 동일하게 선언하여 통신하는 방법이 가장 편하게 통신이 가능합니다.

    데이터스냅 서버를 생성하면 가장 기본적인 EchoString 함수와 ReverseString 함수가 있습니다.

    해당 함수들은 아래와 같이 선언되어 있는 걸 볼 수 있습니다.

    public
        { Public declarations }
        function EchoString(Value: String): String;
        function ReverseString(Value: String): String;

    클라이언트에서 위와 동일하게 함수를 선언 후에 아래와 같이 TFDStoredProc 컴포넌트를 이용해 함수를 연결하여 호출해주면 됩니다.


    함수의 파라미터는 ExecProc를 하면서 [] 안에 넣어주면 개수와 상관 없이 전달이 가능합니다.

    그리고 proceudre가 아닌 function의 경우 함수의 반환 값은 가장 마지막 파라미터 값이 되는 점을 주의해야합니다.

    따라서 EchoString의 경우 [0]파라미터를 서버로 전송하고 [1]파라미터 Result 반환 값을 읽어들이면 됩니다.

    function TModule.EchoString(Value: String): String;
    var
      Con : TFDConnection;
      Prc : TFDStoredProc;
    begin
      try
        Con : TFDConnection.Create(nil);
        Prc : TFDStoredProc.Create(nil);
        try
          // DS 연결 함수 호출
          DSConnect(Con);
          Prc.Connection := Con;
          
          Prc.Close;
          Prc.ExecProc('TMethods.EchoString', [Value]);
          
          Result := Prc.Params[1].AsString;
          Prc.Close;
        finally
          FreeAndNil(Prc);
          FreeAndNil(Con);
        end;
      except
        Result := '';
      end;
    end;
    
    function TModule.ReverseString(Value: String): String;
    var
      Con : TFDConnection;
      Prc : TFDStoredProc;
    begin
      try
        Con : TFDConnection.Create(nil);
        Prc : TFDStoredProc.Create(nil);
        try
          // DS 연결 함수 호출
          DSConnect(Con);
          Prc.Connection := Con;
          
          Prc.Close;
          Prc.ExecProc('TMethods.ReverseString', [Value]);
          
          Result := Prc.Params[1].AsString;
          Prc.Close;
        finally
          FreeAndNil(Prc);
          FreeAndNil(Con);
        end;
      except
        Result := '';
      end;
    end;

     

    좋아요 ♥ + 구독 부탁드립니다 : )

    728x90
    반응형

    댓글