Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Kommunikation zweier Programme via Internet (https://www.delphipraxis.net/83113-kommunikation-zweier-programme-via-internet.html)

Hador 27. Dez 2006 19:32


Kommunikation zweier Programme via Internet
 
Ich habe mal wieder ein altes Projekt von mir aufgegriffen: Ein Multiplayer-Schachspiel

Für die kommunikation habe ich bisher die Klassen TServerSocket und TClientSocket benutzt.
Im lokalen Netzwerk funktioniert das auch ohne Probleme. Über das Internet funktioniert dieser Weg allerdings nicht.
Das liegt vmtl. daran, dass bei meinem Router der Port (ich hatte 12321 genutzt) nicht freigegeben ist.
Ich wollte den nutzern allerdings nicht zumuten, extra für dieses Prgm. ihre Routerkonfiguration zu ändern.
Deshalb hatte ich schon überlegt, ob ich das ganze nicht über ein PHP-Script laufen lasse, was auf jeden Fall funktionieren sollte, jedoch hätte der Server mit dem PHP-Script vmtl. einiges zu tun, auch wenn pro Zug jeweils lediglich 2 Byte übertragen werden müssen. Aber es man müsste im Prgm. ja ständig abfragen, ob der Spielpartner bereits seinen Spielzug gemacht hat, ...
Und da man andere Onlinespiele ja auch so spielen kann (ohne Konfigurationsveränderung) muss es ja irgendwie möglich sein.

Daher wollte ich mal nach eurer Meinung fragen, wie ich sowas am besten realisieren kann und evtl. auch welche Komponenten ich nutzen könnte. Ich habe sowas bisher wie gesagt immer mit TServer-/TClientSocket gemacht. Mit den Indys bin ich schon wegen derer HPPT-Komponente in Kontakt gekommen und die ICS benutze ich für meinen FTP-Server. Synapse habe ich mir noch ganicht angeschaut. Ebenso sieht es mit den in D2k6 integrieten TTCPServer/TTCPClient aus.

Was empfehlt ihr mir, was habt ihr schon für Erfahrungen gemacht, habt ihr irgendwelche Beispiele/Ansätze?

Heffalump 28. Dez 2006 08:15

Re: Kommunikation zweier Programme via Internet
 
Mach einen der Spieler zum HTTP Server und packe entsprechende Webservices hinein. Der Gegenspieler kann sich dann wie ein HTTP Client über den Webservice unterhalten.

jokerfacehro 28. Dez 2006 08:36

Re: Kommunikation zweier Programme via Internet
 
Zitat:

Mach einen der Spieler zum HTTP Server und packe entsprechende Webservices hinein. Der Gegenspieler kann sich dann wie ein HTTP Client über den Webservice unterhalten.
-gerade das soll doch nicht sein


Zitat:

ob ich das ganze nicht über ein PHP-Script laufen lasse
das ist schon ein guter ansatz mit dem php-script

greife einfach per get auf das script zu
z.B.
Delphi-Quellcode:
WebBrowser1.Navigate('http://www.hallo.de/chess?action=set_pos&fig=12&player=white');
du müsstest natürlich ständig das script abfragen da du ja eine passive verbindung haben willst ;)
aber das funktioniert

Heffalump 28. Dez 2006 08:45

Re: Kommunikation zweier Programme via Internet
 
Zitat:

Zitat von jokerfacehro
Zitat:

Mach einen der Spieler zum HTTP Server und packe entsprechende Webservices hinein. Der Gegenspieler kann sich dann wie ein HTTP Client über den Webservice unterhalten.
-gerade das soll doch nicht sein

Wenn ich ihn richtig verstanden habe, ging es ihm um Möglichkeiten. Zudem habe ich keinerlei Einschränkungen in seinem Posting entdecken können.

marabu 28. Dez 2006 09:24

Re: Kommunikation zweier Programme via Internet
 
Hallo Lars,

deine bestehende Kommunikationstechnik verlangt einen offenen Port. Der Port 80 (HTTP) ist zwar immer offen, aber ich fände es zumindest unschön, wenn dieser Port durch deine Anwendung völlig beschlagnahmt würde. Tunnels und Envelopes sind zwei Ansätze, zu denen du dich informieren könntest. Tunneling funktioniert z.B. mit Indy 9. Envelopes setzen weiter oben an, z.B. implementierst du ein eigenes Protokoll, welches in HTML verpackt werden kann. Eventuell ist hier Push-Technologie (XML-HTTP) interessanter, weil der Client dann vom Server benachrichtigt werden kann.

Freundliche Grüße

Hador 28. Dez 2006 12:43

Re: Kommunikation zweier Programme via Internet
 
Schonmal danke für die bisherigen Antworten :-D

Zitat:

Zitat von Heffalump
Mach einen der Spieler zum HTTP Server und packe entsprechende Webservices hinein. Der Gegenspieler kann sich dann wie ein HTTP Client über den Webservice unterhalten.

Möglich - dennoch unschön - aber auf jeden Fall eine Möglichkeit

Zitat:

Zitat von jokerfacehro
du müsstest natürlich ständig das script abfragen da du ja eine passive verbindung haben willst ;)
aber das funktioniert

Wie ich schon sagte, sah ich das als eine Möglichkeit an, jedoch wird sich der Server, auf dem das PHP-Script liegt freuen, wenn dort plötzlich mehrmals pro Sekunde das Script aufgerufen wird. Und das Script müsste "fst" sein. Also müsste ich darauf auchten, dass dieses auch immer auf meinem Webserver liegt. Sobald es weg ist funktioniert das Prgm. nicht mehr. Daher würde ich das nur als Nötlösung nehmen.

Zitat:

Zitat von marabu
Tunnels und Envelopes sind zwei Ansätze, zu denen du dich informieren könntest. Tunneling funktioniert z.B. mit Indy 9. Envelopes setzen weiter oben an, z.B. implementierst du ein eigenes Protokoll, welches in HTML verpackt werden kann. Eventuell ist hier Push-Technologie (XML-HTTP) interessanter, weil der Client dann vom Server benachrichtigt werden kann.

Danke das hört sich doch schonmal sehr gut an. Ich werde mal sehen, ob ich dazu was finde. Ansonsten wäre ich naturlich über ein kleines Beispiel erfreut :wink:

Falls noch jemand einen anderen Vorschlag hat: Immer her damit :)


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