[JAVA]probleme socket

Fermé
pafpaf - 28 juil. 2008 à 12:56
el_linwin Messages postés 521 Date d'inscription vendredi 25 juillet 2008 Statut Membre Dernière intervention 16 août 2008 - 28 juil. 2008 à 21:28
Bonjour,

je suis en train de développer un petit jeu en réseau, pour le moment je me contente d'un unique client, mais je bloque déjà.

En gros, a chaque action que l'on execute coté client, ça envoi une requete au serveur qui renvoi un résultat au client.

code serveur:

public class Serveur extends JFrame{
static final int port = 2345;
static ArrayList<Grille> monde = new ArrayList<Grille>();
static Grille gri1 = new Grille(10,10,1);
static Grille gri2 = new Grille(10,10,2);
static ServerSocket s;
static Socket soc;
static PrintWriter ecriture;
static BufferedReader lecture;

public Serveur()
{
setVisible(true);
setSize(200,200);
setTitle("Serveur");
}

public void lancement() throws Exception
{
s = new ServerSocket(port);
System.out.println("Lancement réussi");
soc = s.accept();
lecture = new BufferedReader(new InputStreamReader(soc.getInputStream()));
ecriture = new PrintWriter(new BufferedWriter(new OutputStreamWriter(soc.getOutputStream())),true);
ecoute();
}

public void ecoute() throws Exception
{
while(true)
{
String phrase = lecture.readLine();
String mots[]=phrase.split("-");

if (mots[0].equals("end")) break;
else if(mots[0].equals("niveau"))get_map(Integer.parseInt(mots[1]));
}
}


public static void get_map(int a)
{
for(Grille temp : monde)
{
for(int i=0;i<temp.getHauteur();i++)
{
for(int j=0;j<temp.getLargeur();j++)
{
if(temp.getPlateau()[i][j].get_contenu()==a)ecriture.println("niveau-"+temp.getNumero());
}
}
}
}
}

code client:

public class Client extends JFrame {
static final int port = 2345;
static int numero = 1;
static int niveau = -1;
static Socket socket;
static PrintWriter ecriture;
static BufferedReader lecture;
static JButton send = new JButton("Send");
static JLabel j = new JLabel("test");

public Client()
{
setVisible(true);
setSize(200,200);
setTitle("Client");
add(j);
setLayout(null);
j.setBounds(50,50,50,50);
send.setVisible(true);
send.addMouseListener(new Bouton(this));
getContentPane().add(send);
send.setBounds(50,100,100,30);
send.setFocusable(false);

}

public void connexion() throws Exception
{
socket = new Socket("127.0.0.1", port);
System.out.println("Connexion établie\n");
ecriture = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
lecture = new BufferedReader(new InputStreamReader(socket.getInputStream()));
ecoute();
}

public void ecoute() throws Exception
{
while(true)
{
String phrase = lecture.readLine();
String mots[]=phrase.split("-");

if (mots[0].equals("end")) break;
else if(mots[0].equals("niveau"))
{
niveau=Integer.parseInt(mots[1]);
j.setText(""+niveau);
j.repaint();
this.repaint();
}
}
}

public void niveau()
{
ecriture.println("niveau-"+numero);
}

public void get_niveau()
{
System.out.println("\n "+niveau);
}
}


Donc la rien de particulier, 2 interface, celle du client possede un bouton qui permet de lancer la methode niveau(),
le probleme c'est qu'aparament la boucle d'écoute fait "ramer" le client a tel point que je n'arrive pas a utiliser les méthodes. et sans la boucle d'écoute, le cient se déconnecte du serveur.

j'espere avoir été assez clair.

merci pour votre aide.
A voir également:

3 réponses

el_linwin Messages postés 521 Date d'inscription vendredi 25 juillet 2008 Statut Membre Dernière intervention 16 août 2008 90
28 juil. 2008 à 15:00
Bonjour pafpaf,

D'après ce que je vois, ce sont surtout les appels à:
j.repaint();
this.repaint();
qui me semblent faire ramer le système. Les méthodes repaint() sont assez gourmandes en ressources.


Cordialement,
el_linwin
0
je me sens honteu, mais en fait le probleme ne venait pas de la connexion , j'avais oublié de réécrire l'initialisation du serveur, donc il ne trouvé jamais le résultat ^^

désolé pour le dérangement, et merci de ton conseil el_linwin
0
el_linwin Messages postés 521 Date d'inscription vendredi 25 juillet 2008 Statut Membre Dernière intervention 16 août 2008 90
28 juil. 2008 à 21:28
Bonsoir pafpaf,

Ah, oui, effectivement, si le serveur ne s'initialise pas... il y a un problème.
Ce n'est pas grave, l'important est que tu aies trouvé !

Bonne soirée !


Cordialement,
el_linwin
0