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
Seite 1 von 3  1 23      
Major1337

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

Indy: Server an Client

  Alt 9. Jul 2010, 10:57
Delphi-Version: 2009
Hallo!

Ich habe einen Server der auf verschiedenen Portadressen etwas an den Client sendet. Kann ich im Client mehr als ein Port freigeben und besteht die Möglichkeit für den Client herauszufinden auf welchem Port er gerade etwas erhält?

Gruß
Major1337
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Indy: Server an Client

  Alt 9. Jul 2010, 12:25
Hallo Major1337,

Bist du dir sicher mit Deiner Beschreibung?

Normal verbindet sich ein Client auf einen Server mit einer bestimmten PortAdresse.

Willst du also eine Server-Applikation, die auf mehrere Ports lauscht, dann würde ich jetzt einfach mehrere Instanzen von TIDXXXServer nutzten, wobei hier jeder auf einen anderen Port lauscht.

Der Client entscheidet dann vor dem Connect was er machen will und verbindet sich dann auf den Port.

Beispiel WebServer mit FTPServer auf einer Maschine
Port 80 -> Webseitenanfragen
Port 21 -> FTP

Oder hab ich dich jetzt falsch verstanden?

Greez, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

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

AW: Indy: Server an Client

  Alt 9. Jul 2010, 12:46
Hi,

Zitat:
besteht die Möglichkeit für den Client herauszufinden auf welchem Port er gerade etwas erhält?
das was Du suchst ist :

IdTCPClient1.Socket.Binding.PeerPort

Allerdings kann ich mich nur meinem Vorredner anschliessen, ein Client hat immer nur genau eine Connection zu einer IP/PORT



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

Geändert von DataCool ( 9. Jul 2010 um 12:48 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Indy: Server an Client

  Alt 9. Jul 2010, 12:49
Genauergenommen ein Client-Port hat genau eine Verbindung mit einem Server-Port. Der Client kann natürlich mehrere Ports/Verbindungen öffnen
Markus Kinzler
  Mit Zitat antworten Zitat
taveuni

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

AW: Indy: Server an Client

  Alt 9. Jul 2010, 12:58
Der Client kann natürlich mehrere Ports/Verbindungen öffnen
Meiner Meinung nach kann eine Client Instanz (=Socket) nur eine Verbindung öffnen (Gleichzeitig!).
Oder wie?
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Indy: Server an Client

  Alt 9. Jul 2010, 13:01
Ja aber unter Client meint man meistens das Programm.
Markus Kinzler
  Mit Zitat antworten Zitat
Major1337

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

AW: Indy: Server an Client

  Alt 9. Jul 2010, 13:07
Danke, ich habe jetzt beim Server für jede Port eine Execute gemacht. Jetzt möchte ich mit dem Client eine Portadresse aus der Listbox auswählen - mit der er sich dann verbindet.

Delphi-Quellcode:

// Client

procedure TForm1.Button1Click(Sender: TObject);
begin


if not TCPClient.Connected then
TCPClient.Connect
else
TCPClient.IOHandler.WriteLn(Edit1.Text);

end;


procedure TForm1.ListBox1Click(Sender: TObject);
var i : Integer;

begin
  for i := 0 to ListBox1.Count - 1 do

  if ListBox1.Selected[i] then
  TCPClient.Port := StrToInt(ListBox1.Items.Strings[i]);

  end;
Delphi-Quellcode:

// Server

procedure TForm2.FormCreate(Sender: TObject);
begin

IDTCPServer1.DefaultPort := 10;
IDTCPServer1.Active := true;

IDTCPServer2.DefaultPort := 20;
IDTCPServer2.Active := true;
end;

procedure TForm2.IdTCPServer2Execute(AContext: TIdContext);
begin
Memo1.Lines.Add('Port: ' + IntToStr(IDTCPServer2.DefaultPort) + ' ' + acontext.Connection.IOHandler.ReadLN);
end;

procedure TForm2.IdTCPServer3Execute(AContext: TIdContext);
begin
Memo1.Lines.Add('Port: ' + IntToStr(IDTCPServer3.DefaultPort) + ' ' + acontext.Connection.IOHandler.ReadLN);
end;

usw.

Beim Server zeigt er mir aber so immer den selben Port an, jetzt weiss ich nicht wenn ich auf einem anderen Port sende, ob er tatsächlich über den Port senden und nur die falsche Portnummer anzeigt.

Geändert von Major1337 ( 9. Jul 2010 um 13:10 Uhr)
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#8

AW: Indy: Server an Client

  Alt 9. Jul 2010, 13: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 13:14 Uhr)
  Mit Zitat antworten Zitat
Major1337

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

AW: Indy: Server an Client

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

n/a Beiträge
 
#10

AW: Indy: Server an Client

  Alt 9. Jul 2010, 13: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
Antwort Antwort
Seite 1 von 3  1 23      


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 14:43 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