Http Daten am win 10 PC empfangen

#7586013
Lesenswert?

Harald K. schrieb:

Port 80 aufmachen, auf eingehende Verbindungen warten, rudimentär das http-Protokoll implementieren

1
using System.Net;
2

3
using var listener = new HttpListener();
4
listener.Prefixes.Add("http://192.168.xxx.yyy:80/");
5
listener.Start();
6

7
Console.WriteLine("Listening on port 80...");
8

9
while (true)
10
{
11
    HttpListenerContext ctx = listener.GetContext();
12
    HttpListenerRequest req = context.Request;
13

14
    // if (req.Url != "/Data") ... 404 Fehlermeldung
15
    // else
16
    using HttpListenerResponse resp = ctx.Response;
17

18
    resp.StatusCode = HttpStatusCode.OK;
19
 
20
/// ....
21

22
}
#7586085
Lesenswert?

Sebastian W. schrieb:

Wie soll das gehen?

Tut es nicht, wie ich schon schrieb: "Falsche Richtung".

Stephan S. schrieb:

Es gibt lighttpd auch für Windows.

Das ist ein Webserver. Aber die Daten, die übertragen werden soll, die muss man dann auch noch aus diesem Webserver rausholen.

Man kann auch nginx, Apache oder IIS verwenden, wenn man eine dafür passende CGI-Sprache nutzt. Die Kombination Apache & Php ist altbewährt. Alternativ kann man sich auch für node.js etwas zusammenklöppeln.

#7586186
Lesenswert?

Werner schrieb:

Wie mach ich das mit dem endpoint und 10 Zeilen C# code

Hab ich weiter oben geschrieben (10:04), zumindest den Code-Teil dass dein C#-Code HTTP-Requests annimmt. Das Parsen der Payload (JSON) und Weiterverarbeitung danach muss halt noch ergänzt werden. Und wenn es nicht "blocking" sein soll, auch noch ein Thread oder Umstellung auf asynchrone Verarbeitung (GetContextAsync())

Als Anfänger würde ich dir aber empfehlen, erstmal mit dem ganz einfachen Beispiel zu starten, Log-Ausgaben zu ergänzen, schauen ob das funktioniert, und überhaupt Daten vom Shelly ankommen, und ab da dann erst weitermachen.

Die Microsoft-Doku hat für alles schöne Beispiele, z.B. hier um den POST-Body auszulesen:

https://learn.microsoft.com/en-us/dotnet/api/system.net.httplistenerrequest.hasentitybody?view=net-8.0#system-net-httplistenerrequest-hasentitybody

OP #7586369
Lesenswert?

Hab versucht den Code von oben in vs einzutragen. Leider braucht die using Direktive mindestens C# 8.0 Ich schaffe es nicht mein C# aktuell 7.3 auf 8.0 zu bringen. Mir wird max das net framework 4.8 angeboten für C# 8.0 braucht man Mindesten net 5. Hat jemand eine Lösung wie ich C# 8.0 in mein visualStudio bringe. Oder oder gibt es für obiges Beispiel eine Lösung ohne using

#7586747
Lesenswert?

Werner schrieb:

Muß das die Adresse vom PC

Ja. der soll ja listenen.

Werner schrieb:

Listener.Start bringt jetzt den Fehler "Zugriff verweigert.

Hast du am Rechner noch einen anderen Webserver laufen? Probier andere Portnummern, 8080, 8888, würfel was.

Und ich würde dir wirklich raten, selber mal in die Dokumentation zu schauen. Da hättest du z.B. gefunden, dass du z.B. auch ein Prefix "http://*:80/" angeben könntest, was dann auf allen Netzwerk-Interfaces/IP-Adressen des Rechners lauscht.

Und ganz grobes Grundwissen, wie dieses "Web" eigentlich funktioniert, wär auch nicht verkehrt. ("was ist TCP, was sind Ports, was ist der Unterschied zwischen Client und Server, was ist HTTP")

Ansonsten: bei Node-Red könntest du dir das ganze Klicki-Bunti zusammenstellen, ist dann natürlich keine C#-Anfänger-Übungsaufgabe mehr...

Angehängte Dateien:
OP #7586943
Lesenswert?

Sorry für meine Unwissenheit. Will doch nur ein paar Daten vom shelly empfangen.

Bin einen Schritt weiter. Im Administrator mode läuft das Programm und gibt aus: Listening on Port 80...

Das Programm kommt aus listener.GetContext nicht zurück. Nach 1 min kommt ein timeout. Vom Handy schicke ich 192.168.xxx.yy:8080 (die IP vom pc)

Beitrag #7587142 wurde von einem Moderator gelöscht.
#7587779
Lesenswert?

Werner schrieb:

Im Administrator mode läuft das Programm und gibt aus: Listening on Port 80...

Das Programm kommt aus listener.GetContext nicht zurück. Nach 1 min kommt ein timeout. Vom Handy schicke ich 192.168.xxx.yy:8080 (die IP vom pc)

Warum rufst du denn Port 8080 auf, wenn du deine Anwendung dem "Listening on Port 80" nach doch auf Port 80 lauschen lässt?

Wenn .GetContext() nicht zurück kehrt, dann kommt dort auch nix an. Ggf. musst du den verwendeten Server-Port auch noch in der Windows-Firewall freigeben um von außerhalb des Rechners drauf zugreifen zu können (z.B. einfach eine "eingehende Regel" dort anlegen für TCP-Port 80 (oder auf welchen du deine Anwendung lauschen lässt) mit "Zulassen")

Du kannst als ersten Test auch einfach erstmal direkt auf dem Rechner mit der C#-Anwendung in einem Browser http://192.168.xxx.yy:8080/ aufrufen (bzw. :80, wenn du auf Port 80 lauscht) und bei .GetContext() müsste sich etwas tun...

Dem Shelly wird der Port recht egal sein, ob man da in der C# Anwendung nun 80, 8080 oder sonst einen anderen nimmt, sofern der Port in der URL die man im Shelly einträgt identisch ist. (Welche Ports bereits durch irgendwelche Anwendungen/Dienste auf dem Rechner schon belegt sind kann man in Windows btw z.B. über "resmon.exe" anschauen. Dort unter "Netzwerk" und dann "Überwachungsports")

(Firma: Q3) #7588000
Lesenswert?

Eventuell genügt auch ein simpler TCP-Socket auf Port 80 im Listen-Zustand. Da das HTTP-Protokoll textbasiert ist, kann man die wichtigsten Informationen auch "zu Fuß" heraus parsen ... Nachdem die Lesung erfolgt ist, schließt man das Socket (trennt damit die Verbindung) und macht es gleich wieder im Listen-Zustand auf.

OP #7588059
Lesenswert?

Ich hab mittlerweile eine ganze Reihe von c# Programmen aus github probiert. Allen ist gemeinsam, daß sie nichts empfangen. Egal was ich an die Adresse des PC schicke. Da scheint was grundsätzliches nicht zu funktionieren. Gibt es ggf fertige Programme für win10 die das Empfangene in ein file schreiben?

#7588078
Lesenswert?

Dumme Frage: Ist der PC per Kabel oder auch per WLan am Router? Falls WLan: Client Isolation im Accesspoint abgeschaltet?

Obwohl, dann könnte der PC auch nicht auf die Shelly-Weboberfläche...

Teste der Reihe nach: Kriegt dein Programm was mit, wenn du es per Webbrowser auf demselben Rechner ansprichst? Wenn ja: Teste mit Webbroser am Handy oder anderem Rechner im selben Netz, und wenn das auch geht, dann mit dem Shelly...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren