[JAVA]probleme socket
pafpaf
-
el_linwin Messages postés 521 Statut Membre -
el_linwin Messages postés 521 Statut Membre -
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.
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:
- [JAVA]probleme socket
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Eclipse java - Télécharger - Langages
3 réponses
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
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