[PHP] Minecraft ophalen online users werkt niet bij host

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Maikel123
  • Registratie: Februari 2010
  • Laatst online: 06-09 11:44
Hallo,

voor mijn minecraft server wou ik een simpele pagina maken om te kijken of er iemand online is en wie dat zijn.

Heb deze class daarvoor gevonden: https://github.com/xPaw/PHP-Minecraft-Query

En dat werkt allemaal prima, en kan ook servers van buitenaf ermee uitlezen. Dus upload het naar mijn webhost provider en het werkt niet meer. Dacht eerst dat het misschien van buitenaf niet mijn server kon bereiken. Op deze pagina getest en die kon mijn server prima uitlezen http://dinnerbone.com/minecraft/tools/status/

Na tijdje zoeken waar het fout gaat, lijkt het fout te gaan in de WriteData en dan bij FWrite (MinecraftQuery.class.php regel 161), FWrite levert nul op.

PHP:
1
2
3
4
if( $Length !== FWrite( $this->Socket, $Command, $Length ) )
{
return false;
}


Ik heb daarop gezocht en vond dit https://bugs.php.net/bug.php?id=34860

Alleen wordt ik daar niet egt wijzer van en heb ik geen flauw idee waarom en hoe je dit moet oplossen. Heb ook even naar de PHP info gekeken mijn server draait (5.3.3-7+squeeze7) en bij mijn provider draait (5.3.8).

Zijn er misschien andere instellingen waar ik naar kan kijken waardoor het niet werkt of moet ik iets aan het script aanpassen.

Alvast bedenkt voor de moeite.

#edit

Naar nog wat andere test gedaan tot conclusie gekomen dat de poort geblokkeerd wordt door de webhost provider. ticket aangemaakt binnen kwartier bericht en poort open gezet en het werkt :D

Bedankt voor de hulp

[ Voor 8% gewijzigd door Maikel123 op 07-02-2012 19:00 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Kijk voor de grap eerst eens of $this->Socket wel een file pointer bevat. My best guess is dat je geen connectie kan maken om de een of andere reden. Zeker als het ook nog eens via UDP gaat krijg je daar soms geen melding van terug, zie het rode blokje op de manualpagina van fsockopen.

Dus: sla even aan het debuggen, bekijk eens of de socket wel goed geopend wordt en bekijk dan meteen ook $Command en $Length eens.

Het bug report dat je aanhaalt is verder niet relevant want die check die gemaakt wordt in dit if-statement houdt daar al (bewust of onbewust) rekening mee door aan te geven dat het fout gegaan is als er niet even veel bytes geschreven worden als waartoe jij opdracht hebt gegeven.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Maikel123
  • Registratie: Februari 2010
  • Laatst online: 06-09 11:44
Bedankt voor je snelle antwoord, Ik had al gekeken naar $Command en $Length deze zijn gevuld voor $Command staat "þý " met een lengte van 7.

get_resource_type geeft aan dat het een stream is dus dat lijkt mij ook tel kloppen.

Wat het dus kan zijn dat het problemen heeft met UDP, zou dat door instellingen in server kunnen komen omdat het op mijn server wel draait, en via een andere website ook mijn server kan bereiken en uitlezen.

Ga kijken of het mogelijk is de query poort op TCP te zetten en dan testen of het werkt

#edit

Naar nog wat andere test gedaan tot conclusie gekomen dat de poort geblokkeerd wordt door de webhost provider. ticket aangemaakt binnen kwartier bericht en poort open gezet en het werkt :D

Bedankt voor de hulp

[ Voor 17% gewijzigd door Maikel123 op 06-02-2012 23:11 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Maikel123 schreef op maandag 06 februari 2012 @ 21:40:
Bedankt voor je snelle antwoord, Ik had al gekeken naar $Command en $Length deze zijn gevuld voor $Command staat "þý " met een lengte van 7.
Dat is anders een verdachte sequence bytes: Wikipedia: Byte order mark. Ik ken 't Minecraft protocol niet maar misschien heb je er nog wat aan.

[ Voor 14% gewijzigd door RobIII op 06-02-2012 23:22 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Maikel123
  • Registratie: Februari 2010
  • Laatst online: 06-09 11:44
@Roblll
Ik zou het niet weten, minecraft maakt gebruik van het GameSpy4 protocol

Acties:
  • 0 Henk 'm!

  • Feanathiel
  • Registratie: Juni 2007
  • Niet online

Feanathiel

Cup<Coffee>

http://nl.php.net/manual/en/function.fsockopen.php:
UDP sockets will sometimes appear to have opened without an error, even if the remote host is unreachable. The error will only become apparent when you read or write data to/from the socket. The reason for this is because UDP is a "connectionless" protocol, which means that the operating system does not try to establish a link for the socket until it actually needs to send or receive data.
Waarschijnlijk gaat het daarom pas fout bij het versturen van data. Je maakt namelijk geen verbinding, maar verstuurt het direct. Heb je voldoende rechten om gebruik te mogen maken van UDP connecties op de webhost? Het lijkt er namelijk op dat zij deze actief blokkeren. Je zou een (simpel) testje kunnen maken en wat gegevens kunnen versturen naar een willekeurige andere service die gebruik maakt van het UDP protocol.

Acties:
  • 0 Henk 'm!

  • Maikel123
  • Registratie: Februari 2010
  • Laatst online: 06-09 11:44
@Feanathiel
Daar verwees NMe ook al naar. Maar ik heb het probleem al opgelost, had het al in mijn laatste bericht aangepast zal het ook even in start bericht doen. Het lag een mijn webhost provider die met firewall alle ongebruikte poorten blokkeerde
Pagina: 1