Socket/php

cs_agoumi Messages postés 12 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 23 avril 2007 - 1 juin 2006 à 13:02
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 5 juin 2006 à 07:08
bonjour a tous!

bon j'ai réalisé une socket client php qui envoi un "BEGIN" 
et  une socket  serveur  java qui  reçoi  le
message et  repond  par  "END".mon  probleme 
lors de l'execution du socket client :

- je reçoi un affichage comme ci-dessous:
connexion OK.

Envoi de la requête.OK.

Lire la réponse : END END END END
END
Fatal error: Maximum execution time of 30 seconds exceeded in ....


mon code source est:
client.php
<?php

$fp = fsockopen("localhost",4000, $errno, $errstr, 30);

if (!$fp) {

   echo "$errstr ($errno)
\n";

} else

{

   echo "connexion OK.
";

}


$in = "BEGIN\r\n\r\n";

$in .= "Host: localhost\r\n";

$in .= "Connection: Close\r\n\r\n";

$out = '';


echo "Envoi de la requête.";

fwrite($fp, $in, strlen($in));

echo "OK.
";


echo "Lire la réponse : ";

while ($out = fgets($fp, 2048)) {

   echo $out;

}


echo "Fermeture de la socket...";

fclose($fp);

echo "OK.
";

?>

serveur.java

package test;

import java.io.*;

import java.net.*;


public class Serveur {

static final int port = 4000;


public static void main(String[] args) throws Exception {

        ServerSocket s = new ServerSocket(port);

        Socket soc = s.accept();

       

        // Un BufferedReader permet de lire par ligne.

        BufferedReader plec = new BufferedReader(

        new InputStreamReader(soc.getInputStream())

        );

       

        // Un PrintWriter possède toutes les opérations print classiques.

        // En mode auto-flush, le tampon est vidé (flush) à l'appel de println.

        PrintWriter pred = new PrintWriter(

        new BufferedWriter(

        new OutputStreamWriter(soc.getOutputStream())),

        true);

       

        while (true) {

        String str = plec.readLine();

        String endTask="END"; // lecture du message

        if (str.equals("BEGIN"))

        System.out.println("ECHO = " + str); // trace locale

        pred.println(endTask); // renvoi d'un écho

        }

        }

        }

je sais pas comment resoudre le probleme.

svp si quelqu'un a une idee merci de me donner un indication!

cordialement!

3 réponses

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
1 juin 2006 à 13:44
Salut,

t'as mis un while(true) dans ton code java, tu fais donc une boucle a priori infinie.

<hr size="2" width="100%" /><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
0
radouan_as Messages postés 1 Date d'inscription vendredi 26 mai 2006 Statut Membre Dernière intervention 5 juin 2006
5 juin 2006 à 02:39
merci bien
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
5 juin 2006 à 07:08
Tu peux cliquer sur "réponse acceptée" stp ? merci

<hr size="2" width="100%" /><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
0
Rejoignez-nous