"Then there was the man who drowned crossing a stream with an average depth of six inches."
Als je de echte socket functies gebruikt, heb je dat probleem niet meer. Dan kun je gewoon precies een pakketje als respons lezen.
Waar heb je trouwens de protocolinformatie vandaan? Ik heb wel eens iets soortgelijks gemaakt, maar dan alleen met een "getinfo" broadcast om te zien welke servers er zoal actief waren.
Werkt dit wel voor mij? Ik zat even te denken maar ik gebruik udp packets en geen tcp/ip? Ik hoef niet speciaal een connectie te maken om bij een server te kopen. Enige wat ik zou moeten doen is een bepaald commando sturen naar een ip adres en die rammelt wel terug (hoezo leuk floodmogelijkheid
Overigens volgende de php manual moet die timeout of die buffer niet compleet vollopen, bij een ef (of als er geen data meer komt) moettie ophouden met prroberen te ontvangen.
[ Voor 48% gewijzigd door Tom-my op 07-08-2003 08:54 ]
"Then there was the man who drowned crossing a stream with an average depth of six inches."
Mja, ik zocht eigenlijke nette protocol informatie, en geen hele tutorial waar ik de specificatie tussenuit moest vissen. (Dan gebruik ik wel een packet sniffer). Maar toch bedankt.
Zoals ik het begrijp, beschouwt PHP alle binnenkomende UDP payload als gegevens op de filestream. Er is met UDP geen expliciete EOF marker (omdat het een connectionless protocol is) dus daarvoor wordt de timeout gebruikt. De lees-operatie probeert de buffer te vullen en wacht dus tot er een timeout komt. Pas dan wordt de onvolledige buffer gerouterneerd.Ik heb dit al in delphi gemaakt, zit het nu om te zetten naar php. En tja ik vond het zo focking traag. Wat ik alleen niet snap, die timeout doet neits eigenlijk. Of moet je die zien 'als er geen data komt' -> timeout else -> wachten?
[..]
Overigens volgende de php manual moet die timeout of die buffer niet compleet vollopen, bij een ef (of als er geen data meer komt) moettie ophouden met prroberen te ontvangen.
Om echt een enkel pakketje uit te lezen (wat jij wil) moet je de low level socket functies gebruiken. Ik neem aan dat je die onder Delphi ook gebruikte (maar misschien is daar een high level API beschikbaar), dus dan zou het niet zo moeilijk moeten zijn. Op die URL die jij gaf staat trouwens ook gewoon PHP code; werkt die niet?
Overigens kan je ook hier is kijken voor het protocol, overigens heb ik zelf een combinatie gedaan van netwerk verkeer bekijken met ethereal en een blik werpen op die kquery site, gaat erg makkelijk dan met de info die je daarvindt.
http://www.gametiger.net/server-proto.txt
[ Voor 79% gewijzigd door Tom-my op 07-08-2003 16:59 ]
"Then there was the man who drowned crossing a stream with an average depth of six inches."
1
2
3
4
5
6
7
8
9
10
11
12
| $fp = fsockopen("udp://211.180.162.2", 27015, $errno, $errstr,0.01); if (!$fp) { echo "ERROR: $errno - $errstr<br>\n"; } else { fwrite($fp,"ÿÿÿÿplayers\n"); stream_set_timeout($fp, 2); $data = fread($fp, 2400); fclose($fp); echo $data; echo "<br><hr><br>"; // ParsePlayerinfo($data); } |
let op de stream_set_timeout dit did the trick 4 me!
"Then there was the man who drowned crossing a stream with an average depth of six inches."
en daarnaast nog extreem fout ook
[ Voor 33% gewijzigd door curry684 op 08-08-2003 09:43 ]
nope
Ik had laatst wat problemen met 4.3.0 waarbij niet alle door de andere partij verstuurde gegevens (IRC server, tcp) ook daadwerkelijk in PHP werden ontvangen. In versie 4.3.2 is dit probleem verdwenen.

Heeft ie vaker last vancurry684 schreef op 08 August 2003 @ 09:42:
S Y M P T O O M B E S T R I J D I N G ! ! !
en daarnaast nog extreem fout ook