AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Senden/Empfangen mit TTcpServer?
Thema durchsuchen
Ansicht
Themen-Optionen

Senden/Empfangen mit TTcpServer?

Ein Thema von phsteckel · begonnen am 18. Nov 2002 · letzter Beitrag vom 19. Nov 2002
Antwort Antwort
phsteckel

Registriert seit: 18. Nov 2002
4 Beiträge
 
#1

Senden/Empfangen mit TTcpServer?

  Alt 18. Nov 2002, 19:55
Hallochen,

ich arbeite gerade an einer Anwendung basierend auf TTcpServer bzw. TTcpClient. Ich bekomme es hin, dass der Client am Server anmeldet und verbindet.

Leider habe ich keine Ahnung, wie genau ich beim Server auf eingehende nachrichten reagiere - genauer: Über welches Ereignis kann ich auf eingehende Nachrichten reagieren (Listen, Accept, etc. sind ja nicht tauglich). Ich vermisse ein einfaches OnReceive oder ähnliches.

Muss ich hier mit Threads arbeiten?

Kennt sich hiermit jemand aus oder kann mir sogar ein kurzes Sample schicken?

etwas verwirrt,

phsteckel.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2
  Alt 18. Nov 2002, 20:08
Wenn Dir es reicht, dann kann ich Dir ein Beispiel senden, welches auf den Indy Komponenten (www.nevrona.com/Indy) für das TCP Protokoll basiert.

Das funktioniert recht gut - geht aber erst morgen, da das im Büro nur darauf wartet, weitergegeben zu werden.
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#3
  Alt 18. Nov 2002, 22:44
Bei Delphi-Beispielen ist auch der Chat dabei ... der basiert auf den TClientSocket und TServerSocket. Vielleicht hilft dir dass weiter wenn du da mal reinschaust!
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
phsteckel

Registriert seit: 18. Nov 2002
4 Beiträge
 
#4
  Alt 19. Nov 2002, 09:35
Zitat von sakura:
Wenn Dir es reicht, dann kann ich Dir ein Beispiel senden, welches auf den Indy Komponenten (www.nevrona.com/Indy) für das TCP Protokoll basiert.

Das funktioniert recht gut - geht aber erst morgen, da das im Büro nur darauf wartet, weitergegeben zu werden.
Das wäre super - Zur Not schreibe ich das auf Indy um - scheint ohnehin besser zu sein.

phsteckel
  Mit Zitat antworten Zitat
phsteckel

Registriert seit: 18. Nov 2002
4 Beiträge
 
#5
  Alt 19. Nov 2002, 09:38
Zitat von FuckRacism:
Bei Delphi-Beispielen ist auch der Chat dabei ... der basiert auf den TClientSocket und TServerSocket. Vielleicht hilft dir dass weiter wenn du da mal reinschaust!
Leider wird hier keine wirkliche Verbindung etabliert. Der Client schliesst die Verbindung nach dem Senden eines Chat-Beitrages sofort wieder. Daher kann man das mit OnAccept komplett auslesen.

Was ich bräuchte wäre ein Beispiel/ eine Hilfestellung, mit der ich eine Verbindung aufbaue, bei der der Server nachdem die Verbindung besteht, auf eingehende Nachrichten reagiert. (Ich vermute mal, dass ich das mit Threads machen muss - da blicke ich allerdings noch nicht ganz durch

phsteckel
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#6
  Alt 19. Nov 2002, 10:30
phsteckel,

anbei das Demo Projekt. Es ist ein Client und ein Server - wie auch zu erwarten. Basierend auf den aktuellen INDY Komponenten habe ich im lokalen LAN einen Durchsatz von knapp 10 MB/sek erreicht, bei nur minimaler Auslastung der einzelnen Rechner.

Das ist kein fertig ausgearbeitetes Protokoll, sondern diente lediglich als Vorlage. Die einzelnen Schritte
  • Connection aufbauen
  • Client -> Server HELO name
  • Server -> Client +OK HELO (RandomID) - Die Random ID kann zum Verschlüsseln von Passwörtern genutzt werden
  • Client -> Server SIGN clientID
  • Server -> Client +OK
  • Client -> Server PASS passcode
  • Server -> Client +OK oder -ERR
  • Client -> Server PACK SourcePath;SourceFileName;FileSize
  • Client -> Server Daten der Datei
  • Server :: Speichern und Verbindungsabbruch

Threading ist heir nicht eingebaut, aber sehr leicht zu erreichen. Einfach für den Client eine separate Klasse erstellen. Bei Verbindungsaufbau eine Instanz der Klasse erstellen und diese dem Parameter AThread.Data zuweisen. Bei Verbindungsabruch diese Instanz wieder zerstören Mit jedem Command kann mann dann über TKlassenName(ASender.Thread.Data) wieder auf den Clientthread zugreifen. Zusätzlich die TIdThreadMgrDefault in das Projekt aufnehmen und mit dem TCPServer verbinden.

Im Beispiel verweise ich auf die Unit uRoutines, welche Du nicht hast. In dieser ist lediglich die folgende Routine interessant.

Delphi-Quellcode:
function FetchA(
  var aSource: AnsiString; aDelimiter: AnsiChar = ';'; aDelete: Boolean = True
): AnsiString;
var
  I: Integer;
begin
  // find delimiter in element list
  I := Pos(aDelimiter, aSource);
  if I > 0 then
  begin
    // return next element
    Result := Copy(aSource, 1, I - 1);
    if aDelete then
      // remove returned element from list
      Delete(aSource, 1, I);
  end else begin
    // element is last in element list, return
    Result := aSource;
    if aDelete then
      // clear element list
      aSource := '';
  end;
end;
Angehängte Dateien
Dateityp: zip 53_1037698213.zip (6,2 KB, 136x aufgerufen)
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
phsteckel

Registriert seit: 18. Nov 2002
4 Beiträge
 
#7
  Alt 19. Nov 2002, 13:36
Ich habe es jetzt tatsächlich endlich hinbekommen.

Die Vermutung, dass die Indy-Komponenten für meine Anwendung einfach zu mächtig (und zu unübersichtlich) sein könnten, war offenbar völlig falsch.

Im Gegenteil: Es hat jetzt sofort geklappt.

Vielen Dank an alle Tipp-Geber !!!

phsteckel
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#8
  Alt 19. Nov 2002, 13:42
Freut mich. Solltest Du Probleme mit dem Threading haben, mache einfach einen neuen Thread auf und lass es uns wissen. Alles schon gemacht.

Oben gepostetes Programm war ein Test für unsere Software, welcher von letzter Woche ist - und inzwischen komplett integriert ist. Falls Du noch ein Problem finden solltest, lass es mich wissen.
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz