Q&A

  • udp 통신 질문입니다
procedure TForm1000.UDPServerUDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  outlength,I: integer;
  Inlog, Outlog: array [0..2048] of char;
  Outtype, Outfile: array [0..256] of char;
  NumberBytes: Integer;
  //LogType,LogName,TdsName: string;
begin
  try
    AData.ReadBuffer(inlog,AData.Size);
    NumberBytes:= AData.Size;
    
    Outlength:=NSDecodeLog(Inlog, NumberBytes, Outtype, Outfile, Outlog);//가공함수
    
    TdsName:= ABinding.PeerIP;

    Memo2.Lines.Add(Outlog);
    LogOut:= Outlog;
    LogType:= Outtype;
    LogType_Gubun(TdsName,LogType,Outlog);
  except
    //
  end;
end;

LogType_Gubun(TdsName,LogType,Outlog);//이함수가 처리하기전에
데이타가 들어와  이함수를 다시 호출합니다 ( 데이타는 계속 받아야 하구요..)
해결방법이 없을까요?
1  COMMENTS
  • Profile
    허강우 2005.08.02 19:53
    몇가지 방법이 있겠네요.
    1. 순차적 처리를 원한다면 CriticalSection을 전역으로 사용하여
      처리를 보장해 주는 방법입니다.

      Cricical.Enter;
      try
        처리 코드
      finally
        Critical.Leave;
      end;

    2. 기다리는 시간을 줄여야 하고, 트래픽이 순간 집중되는 경우라면 처리를 위한
    버퍼링을 하여 순간적으로 몰리는 것을 처리할 수 있습니다.
    이때는 처리를 위한 패킷을 버퍼에 저장하고, 처리를 위한 쓰레드를 따로 돌려
    버퍼에 데이터가 있을 경우, 처리를 하도록 합니다.