[PHP] Socket auf Existenz Prüfen

Übersicht Andere Programmiersprachen FAQs und Tutorials

Neue Antwort erstellen

Mathias-Kwiatkowski

Betreff: [PHP] Socket auf Existenz Prüfen

BeitragMi, Mai 02, 2018 0:20
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Very Happy

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 Very Happy
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 Very Happy
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Xeres

Moderator

BeitragMi, Mai 02, 2018 22:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Mathias-Kwiatkowski

BeitragDo, Mai 03, 2018 2:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Mai 03, 2018 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Mai 04, 2018 10:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Holzchopf

Meisterpacker

BeitragFr, Mai 04, 2018 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder du erweiterst dein Tutorial halt entsprechend Wink :

- 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 BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Thunder

BeitragSo, Mai 06, 2018 17:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht Andere Programmiersprachen FAQs und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group