Bonjour,

J'ai un soucis avec mon code, je n'arrive pas a utiliser socket_read. Dès que je fais appel a cette fonction mon navigateur tourne en round, la page se charge indéfiniment. Voilà mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
<?php
class GoldSrcQuery{
	const Q_HEADER = "\xFF\xFF\xFF\xFF"; //0xFFFFFFFF;
	const A2A_PING = "\x69"; //0x69;
	const A2S_INFO = "TSource Engine Query\0";
	const A2S_PLAYER = "\x55"; //0x55;
	const A2S_RULES = "\x56"; //0x56;
	const A2S_SERVERQUERY_GETCHALLENGE = "\xFF\xFF\xFF\xFF\x57"; // challenge 
 
	public $socket;
	public $latence;
	public $connected; 
	public function __construct($ip, $port, $ip6 = false) {
		$this->socket = new SocketUdp($ip, $port, $ip6);
	}	
    public function getChallenge() {
		$this->socket->send(self::Q_HEADER.self::A2S_SERVERQUERY_GETCHALLENGE);
		$vars=array('byte', 'long');
		$r = $this->socket->read($vars);
    }
 
}
class SocketUdp{
	public $socket;
	public $stream;
 
	public $ip;
	public $port;
	public $ipv="ipv4"; // ipv4/ipv6
	public function __construct($ip, $port, $ip6 = false) {
		$this->ip = $ip;
		$this->port = $port;
		$this->ip6 = $ip6;
		if(!isset($this->stream)){
			$this->create();
			$this->connect();
			socket_set_block($this->stream);
		}
		print_r($this);
    }
	public function send($cmd){
        $packet=socket_write($this->stream, $cmd);
		echo $packet;
    }
 
    public function connect() {
        $true = socket_connect($this->stream, $this->ip, $this->port);
        if (!$true) {
            echo 'Socket::connect() connection error :(<br />';
        }else{
			echo "Vous etes connecte au port udp!! <br/>";
		}
    }
    public function create() {
        if ($this->ip6 === false) {
            $this->stream = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
        }else{
            $this->stream = socket_create(AF_INET6, SOCK_DGRAM, SOL_UDP);
        }
        if ($this->stream === false) {
            trigger_error('SocketUDP::create init error :(');
        }
    }
    public function read($vars = array()){
		$data = socket_read($this->stream, 1);
		return $data;
	}
}
?>
Voilà et donc dès que je crée un objet GoldSrcQuery, et que j'utilise la fonction getChallenge, sa bug..

Est ce que quelqu'un peut me dire pourquoi s'il vous plait?

Sinon deuxième question, j'ai vu que l'on pouvait également se servir de fsockopen, qu'en pensez vous? Est-ce qu'il existe encore d'autres alternative a ces méthodes?