Je tente désepéremment de connecter différents types de clients-sockets sur un même socket-server écrit en PHP5.
Mon client Flash se connecte parfaitement, et mon client PHP semble se connecter aussi correctement mais le sever ne parvient pas à communiquer à Flash se qui est envoyé par le PHP.Il faut que Flash reqête volontairement le serveur pour récupérer l'information du client php.
Merci pour votre aide ?
Clément
Le server :
#!/usr/bin/php -q
<?
set_time_limit(0);
ob_implicit_flush();
$address = "127.0.0.1";
$port = "9999";
// Policy File
$policy_file = '<'.'?xml version="1.0" encoding="UTF-8"?'.'>'.
'<cross-domain-policy xmlnssi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFileSocket.xsd">'.
'<allow-access-from domain="*" to-ports="*" secure="false" />'.
'<site-control permitted-cross-domain-policies="master-only" />'.
'</cross-domain-policy>';
//---- Function to Send out Messages to Everyone Connected ----------------------------------------
function send_Message($allclient, $socket, $buf) {
foreach($allclient as $client) {
$buf.substr_replace("tk","/me",0);
socket_write($client, "$socket wrote: ".$buf);
}
}
//---- Start Socket creation for PHP 5 Socket Server -------------------------------------
if (($master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
echo "socket_create() failed, reason: " . socket_strerror($master) . "\n";
}
socket_set_option($master, SOL_SOCKET, SO_REUSEADDR, 1);
if (($ret = socket_bind($master, $address, $port)) < 0) {
echo "socket_bind() failed, reason: " . socket_strerror($ret) . "\n";
}
if (($ret = socket_listen($master, 5)) < 0) {
echo "socket_listen() failed, reason: " . socket_strerror($ret) . "\n";
}
$read_sockets = array($master);
//---- Create Persistent Loop to continuously handle incoming socket messages ---------------------
while (true) {
$changed_sockets = $read_sockets;
$num_changed_sockets = socket_select($changed_sockets, $write = NULL, $except = NULL, NULL);
foreach($changed_sockets as $socket) {
if ($socket == $master) {
if (($client = socket_accept($master)) < 0) {
echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
continue;
} else {
array_push($read_sockets, $client);
}
} else {
$bytes = socket_recv($socket, $buffer, 2048, 0);
if ($bytes == 0) {
$index = array_search($socket, $read_sockets);
unset($read_sockets[$index]);
socket_close($socket);
}else{
if($buffer == "<policy-file-request/>"){ // check for policy file request from client
socket_write($socket, $policy_file.chr(10));
}else{
$allclients = $read_sockets;
array_shift($allclients);
send_Message($allclients, $socket, $buffer);
}
}
}
}
}
?>
le client Socket en PHP
<?php
$envoie="Php s'est connectee \n";
if ($socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP))
{
if (!socket_connect($socket,'127.0.0.1','9999'))
{
echo "erreur impossible de lier la socket";
}
else
{
if (!socket_send($socket,$envoie,strlen($envoie)))
{
echo "erreur envoie données html";
}
}
socket_close($socket);
}
echo "Info envoyé";
?>
Le client flash lui fonctionne parfaitement bien avec un XMLsocket en AS3.