IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Connection distante via TCP


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 1
    Par défaut Connection distante via TCP
    Bonjour à tous,

    Dans le cadre d'un jeu de plateau en java, moi et mon collègue essayons d'implémenter une partie multijoueur.

    Voici respectivement nos classes server & client :

    server :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    package multi;
     
    import java.io.*;
    import java.net.*;
     
    public class Server implements Runnable{
     
    	boolean connectionOn = false;
     
    	public void run(){
     
    		int port = 10022;
    		try {
    			ServerSocket sersoc = new ServerSocket(port);
    			System.out.println("Serveur créé sur le port : "+port);
    			// Attente de la connection d'un joueur.
    			Socket soc = sersoc.accept();
    			System.out.println("Connection d'un nouveau joueur");
    			// La connection devient active
    			connectionOn = true;
    			// Création des flux et des interargissement avec ceux-ci (lecture/écriture)
    			InputStream in = soc.getInputStream();
    			OutputStream out = soc.getOutputStream();
    			BufferedReader entree = new BufferedReader (new InputStreamReader(in));
    			BufferedWriter sortie = new BufferedWriter (new OutputStreamWriter(out));
     
    			// On boucle tant que la connexion est active
    			while(connectionOn){
    				// On va chercher la prochaine instruction du client
    				String message = entree.readLine();
     
    				if(message.equals("QUIT")){
    						System.out.println("System Shudown");
    						sortie.write("OK\n");
    						sortie.flush();
    						connectionOn = false;	
    				}
    				else{		
    					System.out.println("Instruction inconnue");
    				}
     
    			}
    			// Si la connection est fermée, on ferme le socket.
    			soc.close();
    		}
    		catch(Exception e){
    			System.out.println(e);
    		}
    	}
    }
    client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    package multi;
     
    import java.net.*;
    import java.io.*;
    import gui.*;
     
     
    public class Client implements Runnable {
     
    	boolean serverOn = true;
    	// Plateau du Client :
    	//MultiGUI clientBoard = new MultiGUI();
     
    	public void run() {
     
    		String hote = "217.*.*.*";   // ici nous rentrons l'adresse ip de celui qui héberge le serveur.
    		int port  = 10022;
    		try{
     
    			// Ouverture du socket de connection du serveur.
    			Socket soc = new Socket(hote, port);
    			// Si la connection est correctement effectuée, on affiche un nouveau plateau :
    			//this.clientBoard.setVisible(true);
    			// Création des flux et des interargissement avec ceux-ci (lecture/écriture)
    			InputStream in = soc.getInputStream();
    			OutputStream out = soc.getOutputStream();
    			OutputStreamWriter sortie = new OutputStreamWriter(out);
    			BufferedReader entree = new BufferedReader (new InputStreamReader(in));
     
    			// TODO : Faire un listener ou un truc comme ca pour les clics sur le plateau
    			sortie.write("QUIT\n");
    			sortie.flush();
     
    			while(serverOn){
    				System.out.println("coucou");
    				String message = entree.readLine();
    				System.out.println(message);
    				if(message.equals("OK")){
    					System.out.println("ConnectionClosed Successfully");
                                            serverOn = false;
    					soc.close();
     
    				}
     
    			}
    			soc.close();
     
    		}
    		catch(IOException e){
    			System.out.println(e);
    		}
     
    	}
     
    }
    Lorsque nous testons ce code en local celui-ci fonctionne et nous arrivons à intéragir avec le serveur.
    Par contre lorsqu'on essaye de rentrer l'ip de celui qui héberge le serveur dans la classe Client rien ne se passe, et ceci aussi bien chez l'un que chez l'autre.

    Voila si vous avez des idées ^^

    Merchi beaucoup

  2. #2
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    salut,

    D'après ton code posté, la première instruction que le client envoie est:
    sortie.write("QUIT\n");
    Et visiblement le serveur est programmé pour clore la connexion dès qu'il reçoit cette chaîne de caractères:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while(connectionOn){
    	String message = entree.readLine();
    	if(message.equals("QUIT")){
    		System.out.println("System Shudown");
    		sortie.write("OK\n");
    		sortie.flush();
    		connectionOn = false;
    	}
    [...]
    }
    soc.close();

  3. #3
    Membre expérimenté Avatar de jiddou
    Inscrit en
    Août 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 247
    Par défaut
    tu devras mettre cette instruction dans le tant que
    Socket soc = sersoc.accept();

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut
    Bonjour, je suis le "collègue" en question

    En fait, même quand on prend un code basique (celui-ci sort d'un bouquin de Java), on arrive a le faire en local sans soucis mais pas lorsque l'on change localhost par une ip...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    import java.io.*;
    import java.net.*;
    import java.util.Scanner;
     
    public class Serveur extends Thread{
     
    	public static void main(String[] args) throws IOException{
     
    		int port = 10022;
    		ServerSocket sersoc = new ServerSocket(port);
    		System.out.println("Système activé sur le port : "+port);
     
    		while(true){
    			Socket soc = sersoc.accept();
    			InputStream in = soc.getInputStream();
    			BufferedReader entree = new BufferedReader (new InputStreamReader(in));
    			String message = entree.readLine();
    			System.out.println("message recu par le serveur = " + message);
    		}
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    import java.net.*;
    import java.io.*;
     
     
    public class Client {
     
     
    	public static void main(String args[]) throws IOException{
     
    		String hote = "localhost";
    		int port = 10022;
    		Socket soc = new Socket(hote,port);
     
    		OutputStream out = soc.getOutputStream();
    		OutputStreamWriter sortie = new OutputStreamWriter(out);
    		sortie.write("coucou");
    		sortie.flush();
    		sortie.close();
     
    	}
     
    }
    On pense que peut-être le serveur est mal créé.. ou sinon on voit vraiment pas

    D'avance merci!

  5. #5
    Membre émérite Avatar de Lorantus
    Homme Profil pro
    Consultant développeur indépendant / Java/VB/C(++)/ObjectPal
    Inscrit en
    Août 2007
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant développeur indépendant / Java/VB/C(++)/ObjectPal

    Informations forums :
    Inscription : Août 2007
    Messages : 599
    Par défaut
    La question qui tue : "Firewall" sur le serveur et le client ?

  6. #6
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sortie.write("coucou");
    même problème que ce post (ou visiblement les codes semblent proches): ton serveur utilise la fonction 'readLine' pour récupérer ce qui a été envoyé par le client.
    Côté client tu dois donc systématiquement finir chacun de tes envois par un retour à la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sortie.write("coucou\n");

  7. #7
    Membre expérimenté
    Profil pro
    Ingénieur informatique
    Inscrit en
    Avril 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 166
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sortie.println("coucou");
    Ca fait l'affaire aussi non?

Discussions similaires

  1. [Web Service] connection à un node distant via php
    Par oracle12 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 26/06/2012, 11h07
  2. Réponses: 4
    Dernier message: 08/05/2010, 12h12
  3. comment connecter vers des base distante via OBDC
    Par tomy_libre dans le forum Bases de données
    Réponses: 4
    Dernier message: 20/04/2009, 23h33
  4. Exécutable gérant une base de données distante via internet
    Par paulgiot dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/07/2004, 14h00
  5. problème de connection mysql par tcp/ip
    Par leroyphil dans le forum Administration
    Réponses: 5
    Dernier message: 04/09/2003, 18h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo