Pbm: différents Socket-Clients pour un même Socket-Server

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Pbm: différents Socket-Clients pour un même Socket-Server

Pbm: différents Socket-Clients pour un même Socket-Server

par churstel » 27 sept. 2009, 20:35

Bonjour,
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.