Telnet Server

Alle Fragen zur Netzwerkkommunikation
hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Telnet Server

Beitrag von hanibal »

Hallo,
ich möchte ein programm schreiben, welches befehle, welche von einem telnet client kommen, verarbeitet und antwortet, ohne verschlüsselung oder sonst irgendwas. ich habe momtentan aber gar keine ahnung, wie ich so etwas realisieren kann.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Viel erfolg :)

Nein ernsthaft was ist jetzt die Frage ? Solln wir sowas für dich machen ?
Wie immer wenn es um Internet dinge geht, schau dir Synapse oder LNet an und lerne. Dort sind für die meissten Standartaufgaben Server und Clients implementiert und du musst sie nur leicht abändern.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Beitrag von hanibal »

Meine Frage is eigentlich, wie mann so einen Server realisieren. z.B. beispiuelmaterialieen.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Beitrag von Socke »

Hier mal ein paar Anfangsideen, auch wenn ich nicht viel Ahnung von Telnet habe...
Da ich nur LNet (0.6.2) installiert habe, kurz ein paar Sachen dazu:
Es gibt eine Komponente TLTelnetClientComponent; die kannst du dir mal angucken. Ansonsten empfehle ich eine TCP-Verbindung (Komponenten sind auch dabei). Dann darfst du das Telnet-Protokoll selbst implementieren. Wikipedia hat ein paar Links zu den RFC-Dokumenten.

MfG Die Socke

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

hanibal hat geschrieben:Meine Frage is eigentlich, wie mann so einen Server realisieren. z.B. beispiuelmaterialieen.


Bei Synapse ist die echo Demo der einfachste Server.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Telnet ist eigentlich kein richtiges Protokoll, sondern heißt, dass einfach die Texte als Byte-String über den Socket geschickt werden. Für einen Telnet-Server reicht es also, einfach einen Server-Socket (Default bei Telnet ist Port 23) aufzumachen und auf eine Eingabe von einem Client zu warten.

-Michael

hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Beitrag von hanibal »

So, ich kann das prog jetzt compileier (dieses echo demo), aber sobalt man auf den button clickt, beendet sich das programm, und im terminal kommt folgende ausgabe:

Code: Alles auswählen

This binary has no thread support compiled in.
Recompile the application with a thread-driver in the program uses clause before other units using thread.
Runtime error 232 at $0806D987
  $0806D987
  $0806DB85
  $08229361  TTCPECHODAEMON__CREATE,  line 35 of echo.pas
  $080816BB  TFORM1__BUTTON1CLICK,  line 32 of unit1.pas
  $08131139  TCONTROL__CLICK,  line 2043 of ./include/control.inc
  $08142E6F  TBUTTONCONTROL__CLICK,  line 57 of ./include/buttoncontrol.inc
  $08143545  TCUSTOMBUTTON__CLICK,  line 185 of ./include/buttons.inc
  $08143981  TBUTTON__CLICK,  line 318 of ./include/buttons.inc
  $081436FA  TCUSTOMBUTTON__WMDEFAULTCLICKED,  line 240 of ./include/buttons.inc
  $08066FA9


EDIT: das problem ist jetz gelöst, as prog beendet sich nicht mehr, die unit cthreads war nicht mit compiliert.

Jetzt beendet sich das prog nicht mehr, wenn ich auf den button clicke, aber es passwirst sonst auch nichts.
wie kann ich dieses echo demo austesten?

hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Beitrag von hanibal »

ah, es leust, ich hab einfach einen protscan gemacht, und daur den port rausgefunden, er erwiedert einfach alles, was ich schreibe.

hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Beitrag von hanibal »

So, jet kann ich schon mal sachen an den server schicken, und der kann das dann auch interpretieren, das eluft schonmal super. aber wenn ich sachen zurück scicke, mit "Sendstring" dann kommt das immer in einer zeile, Sprich:
SendString('juhu');
SendString('jaaa');

ergibt beim client:
"juhujaaa"

wie bekomme ich das hin, das der automatisch eine neue zeile danach macht.?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

indem du ein #13 mitschickst
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Beitrag von hanibal »

ah, danke funktioniert jezt super :)

Hätte nicht gedacht, das das so einfach ist.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6212
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Rechnen ist auch einfach ... erklär das nur meiner Tochter :-)

BTW: Über die Demos und Sourcen arbeiten brigt sehr viel Verständnis, man darf nur oft den Mut nicht verlieren.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Beitrag von hanibal »

Ich habe jetzt auch schon einen funktionierenden client, allerdings habe ich da noch ein problem. ich lese die antworten des servers in eine repeat until scheife aus. bis ein punkt an erster stelle kommt. dabwei ergibt sich dann natürlich das problem, dass es auch möglich ist, das ich eine fehler hafte anfrage sende, oder der server abestürzt ist, usw. wie kann ich auslesen, ob es noch daten gibt, welche ich auslesen kann?

momentan siht mein client so aus :

Code: Alles auswählen

program unbenannt;
{$mode objfpc}{$H+}
 
uses crt,blcksock,classes,SysUtils;
var
  sock: TTCPBlockSocket;
  s: string[255];
  r1 : string;
begin
  sock:= ttcpblocksocket.Create;
  try
    sock.Connect('192.168.0.20','12345');
    repeat
    if sock.lastError<>0 then break;
    readln(r1);
    sock.SendString(r1 + CRLF);
    repeat
    s := sock.recvstring(15000);
    writeln(s);
    until s[1] = '.'
    until r1 = 'exit'
//...
  finally
    sock.Free;
  end;
end.

hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Beitrag von hanibal »

So, den client, habe ich jetzt auch vertig, is n kelines chat prog geworden.

allerdings sehe ich über all, bei den demos, bei den stellen wo man von einem thread auf eine globale variable zugreift eine TCriticalSection. ich denke, das es dafür ist, das nich2 2 gleichzeitig drauf zugreifen können, oder? is es wichtig das mit einzubauen?

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

hanibal hat geschrieben:is es wichtig das mit einzubauen?


Klar, ausser es kommuniziert nur jeweils ein Client gleichzeitig mit dem Server.

Antworten