Indy10 - ReadLongInt() nie zwraca wartości

0

Witam wszystkich,

Pierwszy raz w mojej 6 letniej karierze piszę pytanie na forum programistycznym, także proszę o większą wyrozumiałość. Sprawa dotyczy Indy10, wiem- oklepany temat. Siedzę już nad tym bite parę godzin. Oczywiście przeszukałem internet, przejrzałem przykłady. Prosta aplikacja klient-server:

///
{
*****************************************
***************SERVER********************
}
procedure TTCPListener.HandleIncomingConnection(AContext: TIdContext);
var
  MsgString: String;
  MsgLength: Integer;
begin

  MsgLength := AContext.Connection.IOHandler.ReadLongInt;   

  if Assigned(OnMessageReceived) then
  begin
    if Assigned(OnDataReceive) then
      OnDataReceive(AContext);
    OnMessageReceived(MsgString, AContext);
  end;
end;

{
*****************************************
***************CLIENT********************
}

procedure TTCPSender.Send(ADataToSend: string; AContext: TIdContext);
var
  data: string;
begin
  if AContext <> nil then
  begin
    AContext.Connection.IOHandler.Write(ADataToSend);
  end
  else
  begin
    if not FTCPClient.Connected then
    begin
      try
        FTCPClient.Connect;
      except
        on Exception do
        begin
          //Add2Prot('Connection to host ... cannot be established')
        end;
      end;
    end;
    FTCPClient.IOHandler.Write(123);
  end;
end;
 

Problem następujący: Funkcja ReadLongInt nie zwraca żadnych danych. Spodziewam się że jest to jakiś żenujący błąd i z góry przepraszam za ewentualny stres przy czytaniu. Kod działa, gdy używam ReadLn + WriteLn lub Write + AllData.

Pozdrawiam
Michał

0
micdob napisał(a):

... Oczywiście przeszukałem internet, przejrzałem przykłady.

Doprawdy?

procedure Write(AValue: LongInt; AConvert: Boolean = True); overload;

To czym jest ten drugi parametr?

0

To też sprawdziłem:) Odpowiada on za konwersję reprezentacji maszynowej danego typu danych na reprezentację sieciową. Jego domyślna wartość to True w obydwu przypadkach, przy Write jest konwersja host>network natomiast przy ReadLongInt network>host, tak przynajmniej jest to przedstawione w dokumentacji Indy10. Czy mógłbyś rozwinąć swoją myśl, będę wielce wdzięczny.

0

Daj false oraz skonwertuj pierwszy parametr do LongInt - jawnie

1 użytkowników online, w tym zalogowanych: 0, gości: 1