Avatar billede spil2vind Nybegynder
11. januar 2010 - 20:23 Der er 7 kommentarer

Modtage data via tcp ip på port 50000

Jeg har en alarm enhed som sender alarmer afsted via tcp ip på port 50000, hvordan kommer man igang med sådan en opgave, idet jeg ikke kender formatet på de data som bliver afleveret, kan man starte med at opsamle det modtagne via tekststrenge, tanken er, at alarmer skal give en SMS besked når en alarm kommer ind.

Jeg bruger delphi 2009 med indy10, har prøvet at finde noget source demo, men uden held, håber der er nogle som har erfaring indenfor dette.

Det skal bruges til at kunne anvende lockon's alarmenheder uden abonnement
Avatar billede arne_v Ekspert
11. januar 2010 - 20:44 #1
Du kan jo starte med at lade et program fange alt der sendes og udskrive det i hex og saa gaa igang med at se om du kan reverse engineere det.

Det kan godt blive en heftig stor opgave.
Avatar billede spil2vind Nybegynder
11. januar 2010 - 20:57 #2
Jeg er klar over at der bliver en del arbejde med afkode det modtagne, men har ingen ide om hvorledes jeg kommer igang, kan du give et hint?
Avatar billede arne_v Ekspert
11. januar 2010 - 21:02 #3
Du lytter paa porten, accepterer connections, laeser data og udskriver dem i hex.
Avatar billede spil2vind Nybegynder
11. januar 2010 - 21:17 #4
Det lyder helt rigtigt :-) men hvorledes får man lige sat det op?
Avatar billede spil2vind Nybegynder
11. januar 2010 - 21:27 #5
Har man nogen mulighed for at sætte det op som en slags sniffer? så kunne jeg bedre analysere data.
Avatar billede spil2vind Nybegynder
11. januar 2010 - 21:51 #6
ok har fundet udaf så meget, at jeg få noget brugbart ved :

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
    LStreng : string;
begin
    LStreng := AContext.Connection.IOHandler.InputBufferAsString;
    if LokalStreng <> '' then begin
        Memo1.Lines.Add( LokalStreng );
    end;
end;

og jeg bliver hermed ved med at modtage den samme tekst, hvordan fortæller jeg at jeg har modtaget svaret?
Avatar billede spil2vind Nybegynder
15. januar 2010 - 18:08 #7
OK løsningen fandt jeg selv på følgende måde:

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
  RxBufStr: UTF8String;
  RxBufSize: Integer;
begin
  if AContext.Connection.Socket.Readable then begin
    try
      RxBufSize := AContext.Connection.Socket.InputBuffer.Size;
      if RxBufSize > 0 then begin
        SetLength(RxBufStr, RxBufSize);
        AContext.Connection.Socket.ReadBytes(TBytes(RxBufStr), RxBufSize, False);
        Memo1.Lines.Add('Kode:'+AContext.Connection.Socket.Binding.IP+':'+RxBufStr);
      end;
    except
    end;
    try
      AContext.Connection.Socket.write(#6);
    except
    end;
    try
      while AContext.Connection.Socket.InputBufferIsEmpty do begin
        Memo1.Lines.Add('Start '+AContext.Connection.Socket.Binding.PeerIP +':'+IntToStr(AContext.Connection.Socket.ReadByte) );
      end;
    except
    end;
  end;
end;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester