PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : WifiServer: anderer (zusätzlicher) Port als 80 ?



HaWe
09.11.2017, 17:22
hallo
bisher läuft mein esp WifiServer auf Port 80, nun möchte ich einen 2. Server parallel betreiben (andere Website).
Was immer ich auch probiere, Ports wie 79 (oder 81 oder auch 23) funktionieren nicht: zwar kann man das Gerät anpingen, und im Speedport ist das Gerät auch mit dieser IP aktiv, und auch die Ports sind freigeschaltet, aber wenn man die IP im Browser eintippt (z.B. 192.168.1.99) dann wird keine Verbindung hergestellt.
Dabei ist das doch eigentlich völlig unwichtig mit dem Port, da ich ja über keine dyndns vom www darauf zugreife.
Allerdings selbst mein dyndns Provider bestätigt, dass auf z.B. port 79 zugegriffen werden kann.

#define http_port 79
WiFiServer wifiserver(http_port);

Gebe ich allerdings 80 ein, was eigentlich für den anderen esp vorgesehen ist, klappt es!

33034

Offenbar blockieren also bisher alle Zahlen verschieden von 80 bereits den Zugriff über die IP - seltsam - ganz zu schweigen über die url ...

Welcher andere (zusätzliche) Port als 80 ist ebenfalls möglich? Oder was muss ich im Speedport anders einstellen?

Ceos
09.11.2017, 20:32
das liegt daran dass HTTP normalerweise nur auf port 80 läuft und dein browser ohne zusatz information nur versucht auf diesen zu verbinden ... du musst bei der adresse hinten noch den port angeben mit doppelpunkt getrennt (http://IP:Port/)
alternativ kannst du in der GET anfrage auch unterordner verarbeiten!

wenn dein browser sich verbindet startet er eine GET anfrage, die kannst du auf der server seite lesen udn die informationen darin abrufen .... so taucht da auch die angeforderte seite drin auf wenn ich z.b. http://someIP:somePort/EinUnterOrdner aufrufe

je nachdem WAS da hinter dem schrägstrich steht kannst du dann z.B. eine andere seite anzeigen .... ich würde dir empfehlen ein paar grundlegende infos über das HTTP protokoll anzusehen um zu verstehen wie du mit einem bare metal server und einem normalen bnrowser z.B. mausklicks verarbeiten kannst


TL;DR; Versuchs mal mit Port 81 und ruf dann http://192.168.1.99:81/ auf ... ich wette das klappt sogar mit dem link den das forum aus meinem text generiert ...

HaWe
09.11.2017, 21:01
das liegt daran dass HTTP normalerweise nur auf port 80 läuft und dein browser ohne zusatz information nur versucht auf diesen zu verbinden ... du musst bei der adresse hinten noch den port angeben mit doppelpunkt getrennt (http://IP:Port/)
alternativ kannst du in der GET anfrage auch unterordner verarbeiten!

wenn dein browser sich verbindet startet er eine GET anfrage, die kannst du auf der server seite lesen udn die informationen darin abrufen .... so taucht da auch die angeforderte seite drin auf wenn ich z.b. http://someIP:somePort/EinUnterOrdner aufrufe

je nachdem WAS da hinter dem schrägstrich steht kannst du dann z.B. eine andere seite anzeigen .... ich würde dir empfehlen ein paar grundlegende infos über das HTTP protokoll anzusehen um zu verstehen wie du mit einem bare metal server und einem normalen bnrowser z.B. mausklicks verarbeiten kannst


TL;DR; Versuchs mal mit Port 81 und ruf dann http://192.168.1.99:81/ auf ... ich wette das klappt sogar mit dem link den das forum aus meinem text generiert ...

Port 23, 79, 81 und 82 können nicht von dyndns erreicht werden , obwohl im Speedport frei geschaltet, nur 80 - welcher Port geht sonst noch?

ps, immerhin erreiche ich die IP mit port 81 per Browser über http://192.168.1.99:81, wenn auch nicht dann per www ! (schonmal ein kleiner Schritt! 8) )

Ceos
10.11.2017, 07:29
wenn du portweiterleitung über den router machst, wird es sogar noch einfacher

mach einen server auf port 80 auf und den anderen auf port 8080 (das ist üblicherweise der alternative HTTP port), aus dem internet solltest du dann 2 portweiterleitungen zu deinem gerät schalten können

HaWe
10.11.2017, 09:43
wenn du portweiterleitung über den router machst, wird es sogar noch einfacher

mach einen server auf port 80 auf und den anderen auf port 8080 (das ist üblicherweise der alternative HTTP port), aus dem internet solltest du dann 2 portweiterleitungen zu deinem gerät schalten können

hallo,
danke, aber irgendwie klappt es mit 8080 überhaupt nicht (dyndns-Provider kann auf Port nicht zugreifen).
81 hat immerhin gestern mal geklappt, daher jetzt wieder 81.

Seltsam: auf 81 kann jetzt plötzlich auch nicht mehr zugegegriffen werden, obwohl im Router freigegeben wie zuvor. Manchmal dauert es aber auch ein paar Minuten, bis die Porteinstellungen wirklich übernommen werden, so habe ich zumindest den Eindruck.

Immerhin kann ich aber die Website lokal über IP:81/ und per www mit url:81/ aufrfen. Da es ja nur für mich ist, ist das nicht so tragisch, aber komisch ist das schon.
Andererseits kann ich im Router nur 1 url für den host hinterlegen, das ist immer noch meine 1. von bisher, damit klappt alles automatisch über port 80 - vlt ist das ja der Grund.

Ceos
10.11.2017, 10:00
Andererseits kann ich im Router nur 1 url für den host hinterlegen, das ist immer noch meine 1. von bisher, damit klappt alles automatisch über port 80 - vlt ist das ja der Grund.

okay das ist jetzt router spezifisch und cih vermute mal schwer dass dein router da wohl ein wenig "beschränkt" ist ... obwohl es ja eigentlich eher eie erleichterung sein soll das zu steuern behindert es bei solchen dingen doch eher

dann musst du wohl auf meine alternativ lösung zurückgreifen, du lässt den server auf port 80 laufen und musst beim GET request eben die angeforderte seite auswerten udn entsprechend die richtige seite zurück geben

zum aufrufen machst du dann deine übliche adresse mit zusätzlichem ordnerpfad

http:// was auch . immer / pfad1
http:// was auch . immer / pfad2
...

und bei der ankommenden GET anfrage reagierst du mit einer verzwigung für die antwortseite


For example, the browser translated the URL http://www.nowhere123.com/doc/index.html into the following request message:

GET /docs/index.html HTTP/1.1
Host: www.nowhere123.com (http://www.nowhere123.com)
Accept: image/gif, image/jpeg, */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
(blank line)

zusatzinfo, mit regex kannst du die GET anfrage leicht auswerten

(?<=\bGET\s).+?(?=[\s\n]) => liefert ales nach der eigentlichen adresse auf inklusive des ersten / nach dem .com ... also aus "www.irgendwas.com/seite_1" wird damit "/seite_1"
(?<=\bHost:\s).+?(?=[\s\n]) => liefert die URL die aufgerufen worden sit, so kannst du z.B. 2 domains auf die gleiche IP mappen und je nach aufruf kommt dann ein anderes ergebnis :D nach dem obigen Beispiel würde dann quasi als ERgebnis "www.irgendwas.com" rauskommen

(?<=\bGET\s\/).+?(?=[\s\n]) diese variante filtert zusätzlich das erste "/" mit raus wenns stört :)

und wenn du möchtest kann ich die regex auch etwas genauer erläutern oder man schaut sie sich einfach mal live an :D
https://regex101.com/r/h4A0Zw/1

HaWe
10.11.2017, 11:59
vielen Dank für deine Mühe alles so genau zu erklären! 8)

Bisher nutze ich die /Ordnerpfade für die website-Buttons zum Schalten: /OUT1=ON /OUT2=OFF
abgespeckter Code s. hier:
http://www.mindstormsforum.de/viewtopic.php?f=78&t=9066

ich rufe also jetzt einfach meine 2. website immer mit dem Port auf, das geht schon, Hauptsache, ich komme auch von unterwegs mit dem Handy drauf.

Alles andere übersteigt jetzt aber deutlich meine Skills... ;)

- - - Aktualisiert - - -

update:
klappt leider doch nicht richtig, sobald beide website-hosts aktiv sind: dann kann ich zwar die beiden websites über die urls nebeneinander laden, aber die Steuerung über die Buttons funktioniert nicht mehr zuverlässig (Button press wird meist - wenn auch nicht immer - ignoriert), und außerdem wird häufig die neue website ebenfalls unter der Caption der alten angezeigt.