Как delphi отправлять и получать команду c-echo, c-get dicom Communication PACS или модальность - PullRequest
0 голосов
/ 09 марта 2011

Как получить сообщение с любого сервера pacs Delphi и отобразить это сообщение в формате ASCII в memo1

можно ли использовать этот инди-компонент.

Это пример кода из http://sourceforge.net/projects/indy10clieservr/

Отправка команды C-ECHO с любого эмулятора модальности или с любого сервера PACS. Подключен Хорошо, но не вижу входящего сообщения в memo1. Но компонент Chamelon HL7 отображает сообщение на Delphi

procedure TServerMainForm.IdTCPServerConnect(AContext: TIdContext);
begin
     memo1.Lines.Add('Connection from ..PeerIP/IP' + AContext.Binding.PeerIP  + '  // '  +    AContext.Binding.IP  + '  @ ' + dateToStr(now) + '->' +  TimeToStr(now)  );
     AContext.Connection.IOHandler.WriteLn('C-ECHO-RSP');
end;

procedure TServerMainForm.IdTCPServerExecute(AContext: TIdContext);
var    CommBlock, NewCommBlock   :    TINDYCMD;
       buf                       :    TIdBytes;
       line                      :    String;
       i                         :    integer;

begin

   memo1.Lines.Add('server execute start' );


   with  AContext.Connection  do
         begin
            IOHandler.Readln(line);
         end;
   try 
    ////////////// This line = 0 and cant see anything memo1. ////////////
    if length(line) > 0  then
        begin
        memo1.Lines.Add(line );
        i:= strToInt(Line);
        end
        else
        i:=-1;
   except

  end;


   case i of
    0:  begin
          TCPServerExecuteExchangeStrings(AContext);
        end;
    1 : begin

         TCPServerExecuteExchangeRecords(AContext);

        end;
    2:  begin
        end;
    else
       //
    end;

   LEDShape.brush.Color := clgreen;
   memo1.Lines.Add('server execute done' );

end;

1 Ответ

0 голосов
/ 10 марта 2011

Я не совсем понял вопрос ... Но я быстро увидел проблему:

Любой интернет-сервер должен проверять ввод. Несоблюдение этого требования представляет угрозу безопасности.

В этом случае вы ожидаете, что вам будет отправлено правильное целое число. Если вы не получите действительное целое число, вы вызовете исключение. Это может быть желательным поведением, но я сомневаюсь в этом.

конкретно эта строка: i:= strToInt(Line);

Вместо этого вы можете попробовать ..

if TryStrToInt(line,i) then
  // Handle valid integer sent
else
  // Handle Invalid integer sent
...