AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Indy: Server an Client

Ein Thema von Major1337 · begonnen am 9. Jul 2010 · letzter Beitrag vom 12. Jul 2010
Antwort Antwort
blackfin
(Gast)

n/a Beiträge
 
#1

AW: Indy: Server an Client

  Alt 9. Jul 2010, 12:10
So geht das natürlich nicht
Du brauchst, um dich an mehrere Ports zu binden, auch mehrere Instanzen des IDTCPServer.
EIN Server bindet sich immer an EINEN Port, willst du mehrere aufmachen, brauchst du mehrere Instanzen.

Was ist überhaupt dein Vorhaben, wieso brauchst du mehrere Ports?
Im Normalfall reicht eigentlich ein offener Port pro Applikation, ausser du willst, wie ChrisE bereits gesagt hatte, mehrere Server für verschiedene Protokolle aufmachen.

Entschuldige mich, wenn ich falsch liege, aber mir kommt es jetzt irgendwie so vor, als würdest du annehmen, für mehrere Clients brauchst du auch mehrere offene Ports am Server. Das stimmt so nicht, du kannst mit einem TCP-Server viele Client-Verbindungen auf einem offenen Port laufen lassen.
(Beispiel Webserver: ein Standard-Webserver läuft auf Port 80 (EIN offener Port), aber kann viele Clients bedienen, die sich immer auf Port 80 verbinden)

Geändert von blackfin ( 9. Jul 2010 um 12:14 Uhr)
  Mit Zitat antworten Zitat
Major1337

Registriert seit: 26. Jul 2009
158 Beiträge
 
#2

AW: Indy: Server an Client

  Alt 9. Jul 2010, 12:12
hmm Ich habe doch IDTCPServer1, IDTCPServer2, IDTCPServer3... usw.
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#3

AW: Indy: Server an Client

  Alt 9. Jul 2010, 12:19
Oh, sorry, das habe ich übersehen, aber dann stimmt dein Code irgendwie nicht, du setzte die Ports für Server 1 und 2 (3 nicht), die Execute-Routinen sind aber für 2 und 3? Jetzt bin ich etwas verwirrt.

Was willst du eigentlich genau machen?
Falls du einen Server-Port "on the fly" umschalten willst, musst du auch die Bindings des Servers umschalten, die eventuell bereits bestehen:

Delphi-Quellcode:
IdTCPServer2.DefaultPort := 20;

for I := 0 to IdTCPServer2.Bindings.Count-1 do
begin
   IdTCPServer2.Bindings[I].Port := IdTCPServer2.DefaultPort;
end;

IdTCPServer.Active := True;
  Mit Zitat antworten Zitat
Major1337

Registriert seit: 26. Jul 2009
158 Beiträge
 
#4

AW: Indy: Server an Client

  Alt 9. Jul 2010, 12:27
Im Anhang sieht man mein Vorhaben. Wenn ich das jetzt richtig verstehe bin ich der Server und der Client ist in diesem Fall Sick. Ich bekomme somit vom Client auf verschiedenen Ports etwas, welche der Client verarbeiten soll.
Angehängte Grafiken
Dateityp: jpg Ports.JPG (105,1 KB, 20x aufgerufen)
Dateityp: jpg Struktur.JPG (43,9 KB, 28x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Indy: Server an Client

  Alt 9. Jul 2010, 12:44
Hi,

das Bild sagt in meinen Augen noch nicht aus was Du machen möchtest.
Könntest Du den Sinn & Zweck mal versuchen in Worte zu fassen ?

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
535 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Indy: Server an Client

  Alt 9. Jul 2010, 12:57
Im Anhang sieht man mein Vorhaben. Wenn ich das jetzt richtig verstehe bin ich der Server und der Client ist in diesem Fall Sick. Ich bekomme somit vom Client auf verschiedenen Ports etwas, welche der Client verarbeiten soll.
Du möchtest also mit einem Sick RFID kommunizieren.
Dazu benötigst Du nur einen Port. Ausser wenn die unidirektionalen 50007 und 50008 für send/receive benutzt.
Die anderen unterscheiden sich in der Schnittstelle (HTTP, Socket, SSH) und teilweise im Protokoll.
Für Deine Versuche ist vermutlich 2112 mit STX/ETX am ehesten geeignet. Bist Du im Besitz des Protokolls?
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
Major1337

Registriert seit: 26. Jul 2009
158 Beiträge
 
#7

AW: Indy: Server an Client

  Alt 11. Jul 2010, 22:18
Ich bin noch nicht im Besitz des RFID. Ich möchte das ganze aber mit einem Client und Server simulieren. Ich benötige mehrere Portadressen.

Ich möchte folgendes:

Der Client schickt über Port 10 etwas an Server - der Server erkennt den Port und führt den für diesen Port bestimmten Event aus. Das gleiche sollte auch für andere Ports gelten.

Geändert von Major1337 (11. Jul 2010 um 22:56 Uhr)
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
535 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Indy: Server an Client

  Alt 12. Jul 2010, 07:48
Und wo liegt Dein Problem?
Du erzeugst auf der Serverseite so viele Instanzen wie Du Ports brauchst.
Dasselbe auf der Clientseite.
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Indy: Server an Client

  Alt 12. Jul 2010, 07:57
Hi Major,

jetzt bin ich auch ein wenig verwirrt.
Was hat den der Port 10 mit der obrigen Grafik zu tuen ?

Du möchtest den Server auf verschiedenen Ports laufen lassen ,
kein Problem dafür gibt es sogar mehrere Möglichkeiten :

1. Eine Anwendung, ein TIdTcpServer und über die Eigenschaft "Bindings" alle Ports hinzufügen,
auf denen der Server lauschen soll.
Das führt dazu das Du nur ein einen TIdTcpServer mit einem "OnExecute" hast,
indem Du allerdings dann die Ports der verschiedenen Clients unterscheiden musst.

2. Eine Anwwendung mehrere TIdTcpServer, für jeden Port der für die Clients offen sein soll einen Server,
dadurch gibt es auch für jeden port ein "eigenes" "OnExecute".

3. Mehrere Anwendungen bzw. eine Anwendung die mehrfach gestartet wird und je nach Configuration/Übergabe auf einem bestimmten Port läuft.
Bsp.: Der Server soll auf 3 Ports lauschen, dann wird Dein Program 3 x gestartet :
DeinServer.exe 44444 (diese Exe soll auf Port 44444 laufen)
DeinServer.exe 44445 (diese Exe soll auf Port 44445 laufen)
DeinServer.exe 44450 (diese Exe soll auf Port 44450 laufen)
In der Anwendung selber hat Du nur einen TIdTcpServer und nur ein OnExecute, den Port des Servers setzt Du beim Start der Anwendung.
Einfach wie jetzt hier im Bsp. die Eigenschaft "ParamStr" auslesen.

Ich würde Variante 3 wählen!
Übersichtlicher Code, Anzahl der Ports/Serverinstanz variabel und Du kannst im laufenden Betrieb einen Server "kicken"/neu starten
ohne das die Clients der anderen Server davon betroffen sind(das ist im Live Betrieb nachher viel Wert).

Zitat:
Der Client schickt über Port 10 etwas an Server - der Server erkennt den Port und führt den für diesen Port bestimmten Event aus. Das gleiche sollte auch für andere Ports gelten.
Weiter oben hast Du danach gefragt wie der Client den Port des Servers mit dem er gerade verbunden ist erkennt ....
Antwort:
IdTCPClient1.Socket.Binding.PeerPort Jetzt möchtest Du wissen wie Du das dasselbe(Portunterscheidung) am Server machen kannst ?
AContext.Socket.Binding.PeerPort Eigentlich sollte alles klar sein, sehe kein Problem bei der Umsetzung Deines Vorhabens.

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.

Geändert von DataCool (12. Jul 2010 um 08:23 Uhr)
  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 03:59 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