Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Anfängerfrage Server - Client (https://www.delphipraxis.net/193861-anfaengerfrage-server-client.html)

iphi 16. Sep 2017 14:20

Anfängerfrage Server - Client
 
Hallo,

da ich noch keinerlei Erfahrung mit dem Netzwerken habe, benutze ich vieleicht das falsche Vokabular.
Ich bitte um generelle Stichworte, wo ich weiterlernen muss.

Ich habe folgendes vor:
Es geht um zwei PCs, die am selben LAN hängen (also nicht Internet).
Auf dem einen PC soll ein Serverprogramm laufen, auf dem anderen ein Client.
Der Client soll über das LAN auf dem Server Aktionen auslösen und vom Server auch Daten empfangen können.

Ich habe gesehen, dass da Delphi bereits etwas zur Verfügung stellt (TCPServer, TCPClient). Sind das die richtigen Objekte für meinen Zweck oder gibt es etwas geeigneteres?

Wie funktioniert das mit der Adressierung? Jeder PC hat eine IP-Adresse. Bekommen das Server- und Clientprogramm eine zusätzliche IP Adresse? Wenn ja, woher?

Danke, Thomas

zeras 16. Sep 2017 14:28

AW: Anfängerfrage Server - Client
 
Zitat:

Zitat von iphi (Beitrag 1381345)
Wie funktioniert das mit der Adressierung? Jeder PC hat eine IP-Adresse. Bekommen das Server- und Clientprogramm eine zusätzliche IP Adresse? Wenn ja, woher?

Die Rechner benötigen in der Regel keine neue IP. Wichtig sind die Ports, über die kommuniziert wird. Diese musst du einstellen, damit sich die Rechner finden. Weiterhin wichtig ist die Firewall, wenn du eine auf den Rechner installiert hast. Wenn diese die Ports nicht freigeben, hast du auch keine Kommunikation.
Ich meine, es gab da mal Beispiele. Aber wo die liegen, weiß ich im Moment nicht.

iphi 16. Sep 2017 15:13

AW: Anfängerfrage Server - Client
 
Danke für die Info.

Ich habe das hier gefunden:
http://www.felix-colibri.com/papers/...ogramming.html
Das ist mit der Unit WinSock programmiert. Bin ich da auf der richtigen Spur?

Ich habe Server und Client mal auf demselben Rechner laufen lassen, da geht das. Die benutzen die IP 127.0.0.1, die hat irgendwie nichts mit der IP meines Rechners zu tun. Warum geht das?
Wenn Server und Client auf unterschiedlichen Rechnern laufen geht es nicht.

stahli 16. Sep 2017 15:33

AW: Anfängerfrage Server - Client
 
Die IP 127.0.0.1 steht für LocalHost.
Wenn Server und Client auf dem selben Rechner laufen, dann funktioniert das.

Wenn der Client auf einem anderen PC läuft, musst Du dort die IP des Server-PC angeben.

Ggf. kann der Server auf LocalHost weiter laufen oder Du musst auch dort die öffentliche IP des Server-PC einstellen.
Wenn Du das tust, kann es sein, dass ein Client auf dem Server-PC selbst sich nicht mehr problemlos verbinden kann (ggf. muss der Router entsprechend konfiguriert werden).
Ich habe da diverse Überraschungen erlebt, die ich aber jetzt auch nicht mehr genau zusammenfassen kann.

Wenn Du eine funktionierende Konfiguration findest, würde ich es dann erst mal dabei belassen und damit weiter arbeiten.


Falls Du Dich weiter damit beschäftigen willst, kannst Du auch mal meinen damaligen Thread anschauen: http://www.delphipraxis.net/190482-s...ockettest.html.
Dort benutze ich nicht blockierende Sockets. Das würde aber mit einem älteren Delphi so nicht verwendbar sein.

mjustin 16. Sep 2017 16:30

AW: Anfängerfrage Server - Client
 
Zitat:

Zitat von iphi (Beitrag 1381356)
Ich habe Server und Client mal auf demselben Rechner laufen lassen, da geht das. Die benutzen die IP 127.0.0.1, die hat irgendwie nichts mit der IP meines Rechners zu tun. Warum geht das?
Wenn Server und Client auf unterschiedlichen Rechnern laufen geht es nicht.

Damit der Server Verbindungen von aussen (= andere Rechner) annimmt, muss er externe Socketverbindungen annehmen. Dazu gibt es zwei Wege: a) an die IP Adresse des externen Netzwerkadapters binden oder b) an die IP Adresse 0.0.0.0 binden - diese ist "symbolisch" für "alle IPv4 Adressen" (siehe https://de.wikipedia.org/wiki/0.0.0.0).
Daneben ist der Port wichtig, auf dem er Verbindungen annimmt.

Als einfachste TCP Client/Server Komponenten bietet Delphi die Indy TIdTcpClient und TIdTcpServer. Letztere ist multithreaded, d.h. für jede Client-Verbindung läuft auf dem Server ein eigener Thread. Auf Stackoverflow gibt es dazu viele Praxistipps und Lösungen, z.B. https://stackoverflow.com/questions/...server-to-send

iphi 16. Sep 2017 18:04

AW: Anfängerfrage Server - Client
 
Danke für die vielen Tipps. Da habe ich was zu studieren :-D

Wie finde ich denn heraus, welche Ports auf dem Server-Rechner noch unbenutzt sind?

Ich glaube, ich brauche blockierende Sockets. Auf meinen Server darf immer nur genau einen Client gleichzeitig zugreifen.

stahli 16. Sep 2017 18:14

AW: Anfängerfrage Server - Client
 
Ich denke, dass man den Port probieren muss und wenn der Start nicht klappt, einen anderen (mein Kenntnisstand soweit).


Blockierend heisst: Der Client fragt den Server und wartet auf Antwort bevor er etwas anderes tun kann.
Während der Wartezeit ist er somit blockiert.
Deshalb realisiert man solche Anfragen ggf. in Threads, damit die Anwendung nicht längere Zeit hängt (insbesondere wenn man Long polling nutzt).

Schau Dir mal die Indys an (wie mjustin vorgeschlagen hat), die nehmen einem einige Arbeit ab.


Im Gegensatz dazu ist die die asynchrone Kommunikation etwas anders organisiert. Man schickt einfach Nachrichten hin und her und wenn eine eintrifft wird sie vom Mainprozess verarbeitet.

scrat1979 17. Sep 2017 09:30

AW: Anfängerfrage Server - Client
 
Ich habe mich lange mit der Client-Server-Programmierung beschäftigt und bin nahezu verzweifelt. Es gibt eine Vielzahl von Komponenten, alle mit Vor- und Nachteilen. Mit den Indys sowie mit der ICS bin ich leider nicht zurecht gekommen. Die "Erlösung" waren die WebSocket-Komponenten von esegece, auf die ich per Zufall gestoßen bin. Mittlerweile bin ich Besitzer der lizenzierten Version. Nach kurzer Einarbeitung konnte ich mir meine eigenen "Server-Komponenten" ableiten. Angefangen habe ich beim klassichen Chat-Programm. Im Moment sitze ich an einem LAN-fähigen Terminkalender für mein Geschäft. Alles läuft reibungslos. Eventuell wäre das ja ein Anfang und einen Blick wert.

Jumpy 18. Sep 2017 08:26

AW: Anfängerfrage Server - Client
 
Ich fand seinerzeit dieses Tutorial sehr lehrreich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:35 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