AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Theorie: Client und Server in einem Programm/auf einem Rechn
Thema durchsuchen
Ansicht
Themen-Optionen

Theorie: Client und Server in einem Programm/auf einem Rechn

Ein Thema von Puhbaehr · begonnen am 17. Nov 2005 · letzter Beitrag vom 17. Nov 2005
Antwort Antwort
Puhbaehr
(Gast)

n/a Beiträge
 
#1

Theorie: Client und Server in einem Programm/auf einem Rechn

  Alt 17. Nov 2005, 07:14
Guten Morgen!

Mich beschäftigt grade eine grundlegende Frage:

Dass ich einen Server und Clienten auf ein und demselben Rechner laufen lassen kann das funktioniert ja.
Aber was passiert wenn zwei Server auf dem selben Port laufen? Müsste da Windows nicht meckern? Oder wird einfach der zuerst gestartete Server bevorzugt?

Weitere Frage:
Ist es möglich, dass ich Server und Client in ein und demselben Programm laufen lasse?
Wenn ja, geht das mit den Indy-Komponenten so einfach? Für den Fall, dass es geht bräuchte ich ja für jeweils Server und Client einen eigenen Thread. Da ja der TCPServer bereits seine eigenen Threads erstellt müsste es doch gehen oder?

Ok, zugegeben: Im Normalbetrieb ist das sicherlich ein Unsinn den Clienten und Server in einem Programm laufen zu lassen. Aber wenn ich den Server und Clienten debuggen möchte so müsste ich jeweils den Clienten und den Server, also jedesmal zwei Programme starten. Aber wenn es in ein und dem selben geht würde ich mir diesen Umstand ersparen.

Jetzt schonmal vielen Dank für den Geist
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Theorie: Client und Server in einem Programm/auf einem R

  Alt 17. Nov 2005, 07:16
2 Server auf dem selben Port laufen zu lassen funktioniert nicht.
Server und Client in einer Anwendung laufen lassen funktioniert ohne Probleme... Und so unsinnig ist die Idee garnicht, ich verwende diese Methode auch manchmal
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#3

Re: Theorie: Client und Server in einem Programm/auf einem R

  Alt 17. Nov 2005, 07:19
Client/Server auf einem Rechner verwende ich sehr gern für Interprocess Kommunikation. Der rest wurde ja schon gesagt.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Puhbaehr
(Gast)

n/a Beiträge
 
#4

Re: Theorie: Client und Server in einem Programm/auf einem R

  Alt 17. Nov 2005, 07:39
Bekomme ich denn irgendwie raus ob ein Dienst unter einem Port bereits läuft?
Was passiert z.B. wenn ich meinen Server zufällig unter dem Port eines bereits gestarteten Dienstes starte?
Oder gleiches andersherum: Was passiert mit dem Dienst der erst nach meinem Server gestartet wird und meinen Port benutzen will?

Zu zweitens: Ich probiere genau das seit Tagen aus. Oder anders gesagt, weil ich immer zu faul bin zweimal das Programm zu öffnen hab ich Server und Client gleichzeitig in meinem Programm gestartet. Allerdings, und das ist das seltsame, kann der Client zwar Daten an den Server senden, aber, der Server fängt erst mit der Auswertung an wenn der Client aus seinem Thread raus ist.

Konkret (vereinfacht):

Delphi-Quellcode:
procedure ....BtnClick (...);
var
  Value : Byte;
 begin
  IdTCPClient.Connect; // Verbindet brav
  ...
  Value := 1;
  IdTCPClient.WriteBuffer (Value, SizeOf (Value)); // Sendet brav

  IdTCPClient.ReadBuffer (Value); // Hängt sich in einem ReadTimeout auf
  ShowMessage (inttostr (Value));
  ...
  IdTCPClient.Disconnect;
 end;

procedure ....IdServerExecute (...);
var
  Value : Byte;
 begin
  AThread.Connection.ReadBuffer (Value); // Liest brav
  
  if (Value = 1) then
   begin
    Value := 0;
    AThread.Connection.WriteBuffer (Value, SizeOf (Value)); // Sendet brav
   end;
 end;
Wenn ich ein Log mitlaufen lasse das vor und nach einem Read- und WriteBuffer Statusmeldungen ausgibt wird folgendes ersichtlich:

Code:
17.11.2005 07:29:39:185 Sitzungsnummer: 000000: Client: Erstelle Server...
17.11.2005 07:29:39:185 Sitzungsnummer: 000000: Client: Starte Server...
17.11.2005 07:29:39:205 Sitzungsnummer: 000000: Client: Erstelle Client...
17.11.2005 07:29:39:205 Sitzungsnummer: 000000: Client: Verbinde Client...
17.11.2005 07:29:39:335 Sitzungsnummer: 000001: Client: Sende LoginCmd (1)...
17.11.2005 07:29:39:335 Sitzungsnummer: 000001: Client: Lese Server-Antwort (2)
17.11.2005 07:29:42:339 Sitzungsnummer: 000001: Client: Fehler beim Lesen! Read Timeout
17.11.2005 07:29:42:339 Sitzungsnummer: 000001: Client: Sende Client-Version (3)...
17.11.2005 07:29:42:339 Sitzungsnummer: 000001: Server: Client sendet LoginCmd (1)...
17.11.2005 07:29:42:439 Sitzungsnummer: 000001: Server: Bestätige Login (2)...
17.11.2005 07:29:42:439 Sitzungsnummer: 000001: Server: Server-Antwort Gesendet (2)
17.11.2005 07:29:42:439 Sitzungsnummer: 000001: Server: Client sendet Client-Version (3)...
17.11.2005 07:29:42:439 Sitzungsnummer: 000001: Server: Client terminated
----------------------------------------------------------------------------------------------------------------
TT.MM.JJJJ HH:MM:SS:MS                  Teilnehmer^      ^Nachricht

Teilnehmer
Sobald Sitzungsnummer = 1 ist beginnt Execute zu arbeiten. Alles ok. Aber der Server antwortet nicht rechtzeitig.

Sobald ich aber das Programm zweimal starte, d.h. ein Programm = Client, andere Programm = Server funktioniert es.

Warum? Muss ich den Start des Clienten in einem Exrta-Thread behandeln?
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#5

Re: Theorie: Client und Server in einem Programm/auf einem R

  Alt 17. Nov 2005, 07:43
Zu erstens: Es wird ein Fehler angezeigt, dass dieser Port schon benutzt wird.

Zu zweitens: Logischerweise musst du den Server und Client in getrennten Threads laufen lassen.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Puhbaehr
(Gast)

n/a Beiträge
 
#6

Re: Theorie: Client und Server in einem Programm/auf einem R

  Alt 17. Nov 2005, 07:52
Der Server läuft doch bereits in seinem eigenem Thead. Brauch ich da trotzdem für den Client einen eigenen? Ja oder? Ich probiers gleich mal...

Zu erstens: Wo bekomme ich die Meldung? Ich meine, ich hab das ja bereits ausprobiert und eben keine bekommen. Stilles schweigen. netstat zeigt sogar beide Dienste mit selben Port an.
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#7

Re: Theorie: Client und Server in einem Programm/auf einem R

  Alt 17. Nov 2005, 07:59
Zitat von Puhbaehr:
Der Server läuft doch bereits in seinem eigenem Thead. Brauch ich da trotzdem für den Client einen eigenen? Ja oder? Ich probiers gleich mal...
Keine Ahnung kenn mich mit dem Indy kombonenten nicht so aus!

Zitat von Puhbaehr:
Zu erstens: Wo bekomme ich die Meldung? Ich meine, ich hab das ja bereits ausprobiert und eben keine bekommen. Stilles schweigen. netstat zeigt sogar beide Dienste mit selben Port an.
Also mit der Socket-API erhalte ich einen Error-Code zurück.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Puhbaehr
(Gast)

n/a Beiträge
 
#8

Re: Theorie: Client und Server in einem Programm/auf einem R

  Alt 17. Nov 2005, 08:10
Ok, danke dir erstmal! Werd vielleicht auch mal nach der Socket-API schauen. Vielleicht lässt sich damit was anfangen. Oder ich nutze die vorhandenen Komponenten aus Delphi.

Vielleicht weiß ja noch jemand anderes etwas darüber ob oben gefragtes mit Indy so einfach möglich ist und warum der Client die Daten die der Server schickt nicht lesen kann.
  Mit Zitat antworten Zitat
Puhbaehr
(Gast)

n/a Beiträge
 
#9

Re: Theorie: Client und Server in einem Programm/auf einem R

  Alt 17. Nov 2005, 08:33


Es funktioniert! Danke für den nachhackenden Hinweis!
Denn: Der Server läuft ja bekanntlich bereits in einem Thread! Aber, der Client ist an das Form gebunden und läuft im Thread des Forms.
Also ab, den Clienten in einen Thread gepackt und ab geht er der Peter. Es funzt tadellos! Endlich nach einer Woche Suchen und Ärgern...kann ich weiter machen

(Exception = Ausnahme? Es ist wohl eher eine Ausnahme wenn mal keine Exception kommt muha!)
  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 02:20 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