AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi "Rückkanal" Bei Client/Server Anwendung
Thema durchsuchen
Ansicht
Themen-Optionen

"Rückkanal" Bei Client/Server Anwendung

Ein Thema von Aljoscha · begonnen am 6. Mär 2005 · letzter Beitrag vom 6. Mär 2005
Antwort Antwort
RJelinek

Registriert seit: 6. Mär 2005
4 Beiträge
 
#1

Re: "Rückkanal" Bei Client/Server Anwendung

  Alt 6. Mär 2005, 14:01
Lösung bei Verwendung von Indy:

1.) Vorausgesetzt, du verwendest TCP
Auf einer Seite die IdTCPServer-Komponente, auf der anderen brauchst du eine IdTCPClient-Komponente. Nach dem Verbindungsaufbau des Clients zum Server mit Connect bekommst du über das OnConnect-Event eine IdPeerThread (die ich jetzt mal IPT nenne). Mit dieser hast du die Möglichkeit zu Senden und zu Empfangen über die Routinen IPT.Connection.Readxxx und IPT.Connection.Writexxx. Auf der Clientseite hast du per Default Readxxx und Writexxx-Routinen über die IdTCPClient-Komponente. Da eine TCP-Verbindung bidirektional funktioniert (du kannst also auf beiden Seiten sowohl Senden als auch Empfangen), ist deine Aufgabe recht leicht gemacht ...

2.) Vorausgesetzt, du verwendest UDP
Auf beiden Seiten die IdUDPServer-Komponente verwenden. Die IdUDPServer-Komponente hat ein OnRead-Ereignis und Senderoutinen. Du brauchst also keine Threads (außer das Senden funktioniert bei dir auch Thread-gestützt.)

Lösung zu Threads:
1.) Bei UDP:
Die Komponenten bieten keine Threads, aber da du Callbacks über die OnRead-Ereignisse hast, brauchst du die bei halbwegs eleganter Programmierung auch nicht.

2.) Bei TCP:
Bis jetzt habe ich auf beiden Seiten einen normalen Thread gestartet, der sowohl Senden, als auch Empfangen übernimmt. Beim Empfangen musst du allerdings allerdings unterscheiden, ob du blockierend (also warten bis Zeichen da sind) oder nicht-blockierend arbeiten willst. Beim nicht-blockierenden Verhalten rufst du zuerst XX.ReadFromStack(true,0,false) auf und danach steht in XX.InputBuffer.Size die Anzahl an empfangen Zeichen zur Verfügung (wenn da 0 drinnsteht, dann keine Read-Routine aufrufen, da du sonst blockierst).

Bei der IdTCP-Serverkomponente glaube ich gäbe es die Möglichkeit den IdPeerThread zu verwenden. Dieser ruft das OnExecute-Ereigbnis der Serverkomponente auf, die als Thread beim Server verwendet werden könnte.

Wenn du aber auf beiden Seiten einen Thread brauchst, dann empfiehlt es sich, diesen nicht zu verwenden, da du ansonsten zwei unterschiedliche Quellcodes für Sender und Empfänger hast. Meine manuell angelegten Threads kann ich aber auch beiden Seiten mit identischem Quellcode verwenden.
  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 01:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz