Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Mit Javascript WebSocket in Localhost an mein Prog. Daten senden? (https://www.delphipraxis.net/204632-mit-javascript-websocket-localhost-mein-prog-daten-senden.html)

SearchBot 13. Jun 2020 19:03

Mit Javascript WebSocket in Localhost an mein Prog. Daten senden?
 
Hallo,

1)
Bitte helft mir im Verständnis:
Wenn ich vom Browser Daten an mein Programm sende, dann ist der Browser der "Server" und mein Programm der "Client"?? Oder umgekehrt?

2)
Diese einfachen Text-Daten will ich aus Javascript schicken (vielleicht ist da ja schon was falsch? Ich habe auch das passende Meta-Tag gesetzt, siehe https://content-security-policy.com/connect-src/ ):

Code:
var sock = new WebSocket('ws://localhost','delphitool');
sock.send("Hallo");
Im meinem Delphiprogramm habe ich die TClientSocket-Komponente so eingestellt:
Code:
ClientType: ctNonBlocking
Host: localhost
Port: 0
Service: delphitool
Ich lasse es gleich beim FormCreate öffnen:
Delphi-Quellcode:
if(ClientSocket1.Active = False) then ClientSocket1.Open;

Dann erzählt es mir jedoch in einer Messagebox beim starten:
Zitat:

Windows-Socket-Fehler: Der angeforderte Name ist gültig, es wurden jedoch keine Daten des angeforderten Typs gefunden (11004), bei API 'ASync Lookup'
Verstehe ich nicht, ich hab ja auch noch keine Daten vom Browser gesendet, das Programm soll ja nur "hinhören" und bei Bedarf den vom js gesandten Text lesen.

Was mache ich falsch?
Muss ich es mit der TServerSocket-Komponente machen (da bekomme ich aber auch diese Fehlermeldung)??

Schön mal Danke fürs Lesen.

jfheins 13. Jun 2020 19:41

AW: Mit Javascript WebSocket in Localhost an mein Prog. Daten senden?
 
Zitat:

Zitat von SearchBot (Beitrag 1467205)
Bitte helft mir im Verständnis:
Wenn ich vom Browser Daten an mein Programm sende, dann ist der Browser der "Server" und mein Programm der "Client"?? Oder umgekehrt?

Dann ist dein Programm eher der Server. Eine andere Art, darüber nachzudenken: Welches Stück Software möchtest du zuerst starten (sodass es auf das andere Stück wartet)? Das ist der Server.

Was mir direkt auffällt: Du hast keinen Port definiert. Das musst du aber machen, sonst können die sich ja nicht finden. Also beim Server musst du den vorgeben und der Client sollte dann auf dem gleichen port suchen.

SearchBot 13. Jun 2020 20:14

AW: Mit Javascript WebSocket in Localhost an mein Prog. Daten senden?
 
Okay, danke schon mal.

Als TServerSocket hatte ich es auch schon, Port auch 8080.

Da hab ich diese Fehlermeldung auch bekommen.

In der Hilfe steht zu "System.Win.ScktComp.TServerSocket.Service"
Zitat:

Bestimmte Port-IDs sind für spezielle Dienste reserviert. Service bietet deshalb eine Möglichkeit, die Server-Schnittstelle für die Socket-Verbindung festzulegen. Für Server-Sockets kann durch die Verwendung von Service (anstatt von Port) sichergestellt werden, dass der Server TCP/IP-Anforderungen an der korrekten Schnittstelle erwartet.
Hab das so verstanden, daß ich entweder mit Port oder mit Service das machen kann.
Im Javascript hat er bei dem WebSocket als Parameter: (adresse, service).
Ich bin mir halt unsicher, was da wo hinkommt, weil ich den WebSocket auch noch nicht öffnen konnte...

Olli73 14. Jun 2020 10:56

AW: Mit Javascript WebSocket in Localhost an mein Prog. Daten senden?
 
Das geht soo nicht:
https://stackoverflow.com/questions/...t-to-c-winsock

SearchBot 14. Jun 2020 17:39

AW: Mit Javascript WebSocket in Localhost an mein Prog. Daten senden?
 
Zitat:

Zitat von Olli73 (Beitrag 1467214)

Ohweh... die Daten liegen bei mir einen Nanometer nebeneinander im Speicher und ich komme nicht ran :roll:

Olli73 14. Jun 2020 18:08

AW: Mit Javascript WebSocket in Localhost an mein Prog. Daten senden?
 
Du brauchst dir doch nur eine Websocket-Server-Implementierung zu suchen und diese nutzen...
Vielleicht reicht auch ein HTTP-Server? Oder muss es unbedingt websocket sein?

SearchBot 15. Jun 2020 09:55

AW: Mit Javascript WebSocket in Localhost an mein Prog. Daten senden?
 
Nein, den Tipp mit Websocket hatte ich bekommen, da sah alles ganz easy aus :|

Ich hab überlegt, ob ich mir mit xampp den Apache als Server starte und damit was machen kann??

Der Weg ist halt und alles lokal: Javascript im Browser -> Delphiprogramm

Unelegant wäre es, die Daten zu sammeln und als Download zu generieren, dann hätte ich zwar die Daten als Datei, aber in vielen kleinen Fragmenten, die ich dann mit dem Delphiprogramm wieder zusammenzusetzen kann.
Aber es gibt sicher auch viel bessere Lösungen?!

Bbommel 15. Jun 2020 10:55

AW: Mit Javascript WebSocket in Localhost an mein Prog. Daten senden?
 
Möchtest du vielleicht etwas mehr beschreiben, was du genau machst? Vielleicht sind WebSockets (nicht mit den allgemeinen Netzwerk-Sockets bei Delphi verwechseln) ja einfach etwas übertrieben? WebSockets sollen ja vor allem eine wechselseitige Kommunikation zwischen Client und Server im Web erleichtern, mit der es möglich ist, dass der Server (dein Delphi-Programm) eine Information an den Client (den JS im Browser) sendet, ohne dass der Client direkt vorher eine neue Anfrage gesendet hat.

Da du geschrieben hast, dass es dir um "Javascript im Browser --> Delphi-Programm" geht, weiß ich nicht, ob du diese Erweiterung des HTTP-Protokolls überhaupt brauchst.

Falls nicht, dann wärst du vielleicht mit einem einfachen XNLHttpRequest auf JS-Seite und einem "einfachen" WebServer (bei den mitgelieferten Indys bei Delphi dabei) besser und einfacher unterwegs?

Wenn du mit Websockets arbeiten willst, dann gibt es für Delphi ein paar Komponenten, die das wohl können, kosten aber ggf. auch etwas. Ich habe die selber aber noch nicht ausprobiert bzw. gebraucht.

SearchBot 15. Jun 2020 11:47

AW: Mit Javascript WebSocket in Localhost an mein Prog. Daten senden?
 
Hallo Bbommel,

das ist eine gute Anregung. Das andere wäre ja doch wie mit Raketen auf Ameisen.

Ich möchte einfach nur eine kleine Textnachricht loggen, fortschreitend in eine Datei, die ich dann mit einem Tool auswerte.

Aktuell logge ich die Nachricht in die Browser-Konsole (console.log('bla');). Wenn sich dann ein bisschen angesammelt hat, speichere ich diese Liste bzw copypaste sie in meinen Texteditor in diese fortschreitende Datei.
Das Gefummel will ich halt automatisieren, weil ja auch mal die Webseite unerwartet neu laden kann und dann meine ungesicherten Logs weg sind.

Ich versuche es mal mit deiner Anregung :thumb:

Rolf Frei 15. Jun 2020 15:41

AW: Mit Javascript WebSocket in Localhost an mein Prog. Daten senden?
 
Schau dir doch einfach mal die Delphi Webbroker Doku an und wie einfach das damit zu machen ist. Ich habe damit ein vollwertiges Onlineshop-System gemacht und das funktioniert bei vielen Kunden seit Jahren absolut robust und fehlerfrei.

Webbroker ist glaube ich eines der am meist unterschätzten Feature in Delphi.


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