如何delphi发送和接收命令c-echo,c-get dicom通信pacs或modality

时间:2011-03-09 11:49:20

标签: delphi tcp message dicom

如何从任何pacs服务器Delphi获取消息并在memo1中显示此消息ASCII格式

是否可以使用这个indy组件。

这是来自http://sourceforge.net/projects/indy10clieservr/

的示例代码

从任何模态仿真器或任何PACS服务器发送C-ECHO命令。已连接好但无法在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 :(得分:0)

我不太明白这个问题......但我很快就发现了一个问题:

任何Internet服务器都需要验证输入。不这样做会带来安全风险。

在这种情况下,您希望发送一个有效的整数。如果没有得到有效的整数,则会引发异常。这可能是理想的行为,但我对此表示怀疑。

特别是这一行:i:= strToInt(Line);

相反,你可以尝试..

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