[PHP] Socket auf Existenz Prüfen
Übersicht![](/themes/Standard/arrow.png)
![](/themes/Standard/arrow.png)
![]() |
Mathias-KwiatkowskiBetreff: [PHP] Socket auf Existenz Prüfen |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi leute ich wollte auf meiner webseite anzeigen lassen ob mein server grad online ist oder offline ( an oder aus ) nunja da ich vorwiegend php und mysql nutze ( wobei mysql ist hier nicht von nöten ) habe ich mich etwas schlau gemacht wie so etwas aussehen könnte.
Also um es sehr kurz zu machen... ich habe in BM ein mmo geschrieben und es gillt den aktuellen server status abzufragen ob mein programm an oder aus ist. ![]() hier der code Code: [AUSKLAPPEN] <?php
$fp = fsockopen("127.0.0.1", 1234, $errno, $errstr, 1); if (!$fp) { echo "Offline"; } else { echo "Online"; } fclose($fp); ?> "127.0.0.1" =ist eben die ip man könnte auch abfragen ob goggle online ist ![]() 1234 =der port worauf gelauscht werden soll bei google z.b. 80 die 1 am ende steht für die sekundenanzahl die das script versuchen darf im maximal bereich zu connecten. viel spaß damit ![]() |
||
Skype: Anarchie1984
http://projektworks.de/maxbase/ Icq - Erneuert am 21.08.2017 Yahoo - Erneuert am 21.08.2017 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das sieht mir nicht nach ausreichender Schöpfungshöhe oder Qualität aus.
Ein Standardbefehl und keine Fehlerbehandlung? Bei Netzwerken sollte man mit Timeouts rechnen. Außerdem gibt es keinen Check, ob überhaupt eine Verbindung hergestellt wurde - wie findet man raus, ob da der gewünschte Service läuft? |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] <?php
$fp = fsockopen(IP, PORT, $errno, $errstr, TIMEOUT); if (!$fp) { echo "Offline"; } else { echo "Online"; } fclose($fp); ?> echo "Offline"; =keine verbindung echo "Online"; = Verbindung das ist der check darum ging es ja auch geschlossen wird der socket auch TIMEOUT ist ebenfalls vorhanden echo $errno =error aber wenn es dir nicht von der qualität her reicht darfst du es gern löschen, wollte nur eventuell leuten damit helfen die beabsichtigen zu prüfen ob deren server rennt. und so kann man es auf webseite definitief anzeigen lassen. also vorhanden sind errors timeouts ect. online und offline anzeige also ob eine verbindung zu stande kommt ist gegeben wenn keine verb. zu stande kommt eben offline. es ist ein script was via php ein socket versucht zu lauschen. ich nehme nun das standart example von vertex.bnet Code: [AUSKLAPPEN] SuperStrict
Framework Vertex.BNetEx Import Brl.LinkedList Global Server : TTCPStream, .. Clients : TList, .. Client : TTCPStream Try Server = New TTCPStream If Not Server.Init() Then Throw("Can't create socket") If Not Server.SetLocalPort(84) Then Throw("Can't set local port") If Not Server.Listen() Then Throw("Can't set to listen") Clients = New TList Repeat Client = Server.Accept() If Client Then WriteStdout("New Client:~n" + .. " - IP:" + TNetwork.StringIP(Client.GetLocalIP()) + "~n" + .. " - Port:" + Client.GetLocalPort() + "~n") Clients.AddLast(Client) EndIf For Client = EachIn Clients If Client.GetState() <> 1 Then WriteStdout("Client disconnected:~n" + .. " - IP:" + TNetwork.StringIP(Client.GetLocalIP()) + "~n" + .. " - Port:" + Client.GetLocalPort() + "~n") Client.Close() Clients.Remove(Client) Continue EndIf If Client.RecvAvail() Then While Client.RecvMsg() ; Wend If Client.Size() > 0 Then WriteStdout("Message from client:~n" + .. " - IP:" + TNetwork.StringIP(Client.GetLocalIP()) + "~n" + .. " - Port:" + Client.GetLocalPort() + "~n" + Client.Size() + "~n") While Not Client.EoF() WriteStdout(">"+Client.ReadLine() + "~n") Wend Client.WriteLine("OK") While Client.SendMsg() ; Wend EndIf EndIf Next Forever Catch Exception:Object WriteStdout("Error~n " + Exception.ToString()) End Try If Server Then Server.Close() WriteStdout("~n- ready -~n") End habe local einen server auf port 80 am rennen ( es gibt ja kostenlose wie z.b. netserver jana ect. ) diese haben ein php system integriert, gut ich gehe vorraus das jemand etwas vorwissen hat, immerhin ist dies ja etwas spetzieller. und wenn ich dann das script auf 127.0.0.1 mit dem momentan port 84 (laut dem vertex script) connecte wird es richtig wiedergegeben wenn der vertex server (standart example) nicht läuft wird laut dem script 1 sekunde maximal versucht eine verbindung herzustellen, wenn dies nich möglich ist bricht er ab. 1 sekunde ist aber zu wenig denken viele, da ich davon ausgehe das der webseiten server auf dem system rennt wo auch der erstellte ( bm . bb ) server rennt reicht die zeit da das php script lokal nur lauschen muss dauert es unter einer sekunde. aber die prüfungszeit also der timeout lässt sich ja variieren. mhh viel erklärrt aber nunja wie gesagt bitte entferne es falls die qualität wirklich nicht ausreichen sein sollte. |
||
Skype: Anarchie1984
http://projektworks.de/maxbase/ Icq - Erneuert am 21.08.2017 Yahoo - Erneuert am 21.08.2017 |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja es ist wirklich nicht viel Code und eigentlich kommt da jeder selber drauf denke ich.
Bedenke jedenfalls, dass du mit 127.0.0.1 an der Firewall vorbei gehst (weil man loopback üblicherweise nicht firewallt). D.h. wenn der Port auf den du zugreifst gefirewallt ist, kannst du von außen nicht hin, aber dein Skript zeigt trotzdem "online". Es würde wahrscheinlich reichen, die externe IP Adresse anzugeben, um dieses Verhalten zu ändern. |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
nunja wäre blöd wenn man sich einen server mietet dort den port schließt auf dem das spiel läuft. ( der zweck dieses codes sollte sein, um zu zeigen wie man die webseite mit einem bm oder bb server verbinden könnte, und dies auch nur um auf webseite anzugeben ob der server überhaupt läuft oder eben nicht. )
es ist also weniger etwas für den lokalen bereich, auch wenn dies möglich wäre. glaube ich dennoch nich das jemand eine webseite erstellt um auf dem lokalen bereich etwas vorzuzeigen :/ zweck sollte wie gesagt sein. anzeige ob server läuft (nicht der eigentliche root sondern der programmierte game server ) - wer einen game server erstellt für sein eigenes spiel und dann den port blocken lässt ist selbst schuld das sein eigenes spiel nicht lauffähig wäre, zumindest online. demnach würde dieser code natürlich nichts bringen. aber da er nur unruhe rein bringt bitte trasht es. |
||
Skype: Anarchie1984
http://projektworks.de/maxbase/ Icq - Erneuert am 21.08.2017 Yahoo - Erneuert am 21.08.2017 |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oder du erweiterst dein Tutorial halt entsprechend ![]() - Sicherstellen, dass der Host nicht nur online ist, sondern auch, dass dort der richtige Prozess läuft. Am besten mit Pseudocodes für das Hostseitige. Das beinhaltet wohl sowas wie Senden eines Headers von PHP aus, Empfangen einer Antwort und deren Auswertung. - Eine Möglichkeit zeigen, wie der (PHP-)Server an die öffentliche IP des Hosts gelangt. Ggf wie sich der Host beim PHP-Script anmelden kann. |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Natürlich wäre man blöd, wenn man genau den Port blockiert, den man von außen erreichbar haben möchte, aber bei bestimmten Server-Betriebssystemen (z.B. RHEL oder CentOS) sind standardmäßig alle Ports in der Firewall blockiert. Die Frage ist, willst du wissen, ob dein Gameserver läuft oder willst du wissen, ob er läuft und auch erreichbar ist? Ist deine Entscheidung. | ||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
Übersicht
![](/themes/Standard/arrow.png)
![](/themes/Standard/arrow.png)
Powered by phpBB © 2001 - 2006, phpBB Group