1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Chat</title> </head> <body> <div> <h3>Choisis un pseudo</h3> <form action="client.php" method="get"> <input type="text" name="pseudo" value="pseudo" /> <input type="submit" value="Entrer" /> </form> </div> </body></html> |
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 | <?php set_time_limit(0); $adresse='127.0.0.1'; $port=35353; $pseudo=$_POST['pseudo'] ; $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if(!@socket_connect($socket, $adresse, $port)) echo "Le serveur n'est pas lancé"; else { $message = $pseudo." /connect"; socket_write($socket, $message , strlen($message)); while(true) { if($input = @socket_read($socket, $port)) { $pseudo = stripslashes(utf8_decode(substr($input , 0 , strpos($input , ' ')))); $message = stripslashes(utf8_decode(substr($input , strpos($input , ' ')+1 , strlen($input)))); echo '['.$pseudo.']: '.$message.'<br />'; flush(); } else { echo "Le serveur a été éteint"; break; } } socket_close($socket); } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php $adresse='127.0.0.1'; $port=35353; if(!empty($_POST['message'])) { //Création de la socket $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //Connexion au serveur socket_connect($socket,$adresse,$port); //Construction du paquet à envoyer au serveur $paquet=str_replace(' ' , ' ' ,$_POST['pseudo']).' '.$_POST['message']; //Ecriture du paquet vers le serveur socket_write($socket,$paquet,strlen($paquet)); //Fermeture de la connexion socket_close($socket); } ?> |
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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head> <title>Chat</title> <script type="text/javascript"> function envoi_message() { var xhr_object = null; if(window.XMLHttpRequest) // Firefox xhr_object = new XMLHttpRequest(); else { if(window.ActiveXObject) // Internet Explorer xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); else // XMLHttpRequest non supporté par le navigateur { alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); return; } } var method = "POST"; var filename = "send.php"; var requete = "message=" + document.getElementById("envoyer").value + "&pseudo=" + document.getElementById("pseudo").value; xhr_object.open(method, filename, true); xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr_object.send(requete); //On efface le champ d'envoi, et on lui redonne le focus document.getElementById("envoyer").value=""; document.getElementById("envoyer").focus(); } function reception() { var xhr_object = null; var div = document.getElementById('content'); if(window.XMLHttpRequest) // Firefox xhr_object = new XMLHttpRequest(); else { if(window.ActiveXObject) // Internet Explorer xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); else // XMLHttpRequest non supporté par le navigateur { alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); return; } } var method = "POST"; var filename = "reception.php"; var requete = "pseudo=" + document.getElementById("pseudo").value; var taille = 0; //Le nombre de caractères déjà reçus var update = function() { if(xhr_object.readyState == 3 && xhr_object.responseText.length > taille) { taille = xhr_object.responseText.length; var reponse = xhr_object.responseText; document.getElementById("content").innerHTML = reponse; div.scrollTop = div.scrollHeight; } setTimeout(update,100); //Se relance toute les 100 ms (voire moins ?) }; update(); xhr_object.open(method, filename, true); xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr_object.send(requete); } </script> </head> <body onLoad="reception()"> <div id="content" style=" background-color:#E7F2F8; height:350; overflow:auto; "></div> <div> <form action="client.php" method="post" name="useless" onSubmit="return(false)"> <input type="text" size="50" name="envoyer" id="envoyer" /> <input type="submit" value="Envoyer" onClick="envoi_message()" /> <input type="hidden" id="pseudo" value="<?php echo $_GET['pseudo']; ?>" /> </form> </div> </body></html> |
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 | <?php set_time_limit(0); //On crée notre classe class Chat_Server { var $socket=NULL; var $client=NULL; //Méthode qui démarre le serveur function Start($adresse,$port) { echo"Lancement du serveur...\n"; $this->clients=array(); //Création de la socket $this->socket = socket_create(AF_INET, SOCK_STREAM, 0); //on lie la ressource sur laquelle le serveur va écouter @socket_bind($this->socket, $adresse, $port) or die("Port déja utilise\n"); //On prépare l'écoute socket_listen($this->socket); //Boucle infinie, car le serveur ne doit s'arrêter que si on lui demande while(true) { //Le code se bloque jusqu'à ce qu'une nouvelle connexion client soit établie $this->client = socket_accept($this->socket); //Cette méthode lit les données reçues par un client, et les redistribue $reception = socket_read($this->client , 255); $pseudo = substr($reception , 0 , strpos($reception , ' ')); $message = substr($reception , strpos($reception , ' ')+1 , strlen($reception)); //Le message est "/connect", donc on stocke la socket dans le tableau if($message == "/connect") { $this->clients[$pseudo]=$this->client; echo "$pseudo connected\n"; } //C'est donc un message : ici on va envoyer le message vers chacun des clients else { echo "Pseudo: [".$pseudo."] Message recu: [".$message."] Message envoye a : "; //On passe chaque case du tableau = chaque client, et on lui envoie le message foreach( $this->clients as $nom_case => $socket_en_cours) { //Si ça ne marche pas, c'est qu'il est déconnecté if(@socket_write($socket_en_cours, $reception, strlen($reception)) === false) { //La socket est enlevée du tableau unset($this->clients[$nom_case]); echo "[$nom_case s'est deconnecte]"; } else echo "$nom_case "; } //On ferme la socket qui vient de nous apporter un message socket_close($this->client); echo"\n"; flush(); } } } } $chat = new Chat_Server(); $chat->Start('127.0.0.1',35353); ?> |
Changer de design |
En savoir plus |
Plan du site |
Politique d'accessibilité |
Règles |
RSS tutoriels |
RSS news
Édité par Simple IT SARL :
Nous contacter
| Notre blog | Revue de presse | Publicité
Y'a plus rien à lire, faut remonter maintenant !
Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.
352 Zéros connectés |
8 requêtes |
0.0613s (0.0321s)