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 :

[Socket] Conversation entre 2 ordi


Sujet :

Entrée/Sortie Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 159
    Points : 108
    Points
    108
    Par défaut [Socket] Conversation entre 2 ordi
    Bonjour,

    D'abord pardon si je poste n'importe où mais apparement je n'ai pas le droit de poster dans les sous-sous-forums (erreur de compte ?) bref...

    Je suis en train de faire un programme de messagerie instantanée, genre msn, entre 2 ordi

    J'ai donc un Server : PC sous vista avec jdk1.6 et Eclipse 3.0
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    import java.net.*;
    import java.io.*;
     
    public class Server {
     
        public static Socket clientSocket=null;
        public static BufferedReader in = null, user = null;
        public static PrintWriter out = null;
        public static ServerSocket serverSocket = null;
     
        public static void Connection()throws IOException{
     
    		// Ouvrir la connection au client
        	try {
    	            serverSocket = new ServerSocket(4444);
    	            System.out.println("Waiting for Client...");
    	    } catch (IOException e) {
    	            System.err.println("Could not listen on port 4444.");
    	    }
     
    	    // Accepter la connection du client
    	    try {
    	    		clientSocket = new Socket();
    	    		clientSocket = serverSocket.accept();				
    	    } catch (IOException e) {
    	            System.err.println("I/O error");
    	    }
     
        }   
     
        public static void FromClient() throws IOException {
        	String fromClient;
     
        	// Creation du buffer
        	try {
        		in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        	} catch (IOException e) {
                System.err.println("I/O error");
        	}
     
        	// Lire et afficher ce que dit le client
    	    while ((fromClient = in.readLine()) != "null") {
    			System.out.println("Client says: " + fromClient);
    	    }
        }
     
        public static void ToClient() throws IOException {
        	String fromUser;
     
        	// Creation des buffers
        	try {
    	    	out = new PrintWriter(clientSocket.getOutputStream(), true);
    			user = new BufferedReader(new InputStreamReader(System.in));
        	} catch (IOException e) {
                System.err.println("I/O error");
        	}
     
        	// Lire ce que frappe l'utilisateur et l'envoyer au client
    		while ((fromUser = in.readLine()) != "null") {
    			out.println(fromUser);
    	    }
        }
     
        public static void Disconnection()throws IOException{
    	    out.close();
    	    in.close();
    	    clientSocket.close();
    	    serverSocket.close();
        }
     
    	public static void main(String[] args) throws IOException  {
    		Connection();
    		ToClient();
    		FromClient();
     
    	}
     
    }
    et un Client : Macbook avec MacOs X et Eclipse 3.2
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    import java.io.*;
    import java.net.*;
     
    public class Client {
     
    	public static Socket kkSocket = null;
    	public static PrintWriter out = null;
    	public static BufferedReader in = null, user = null;
     
    	public static void Connection() throws IOException {
     
    		// Connexion au serveur
    		try {
    	            kkSocket = new Socket("192.168.1.3", 4444);	            
    	            System.out.println("Connected to 192.168.1.3\n");
    	    } catch (UnknownHostException e) {
    	            System.err.println("Unknown host");
    	    } catch (IOException e) {
    	            System.err.println("I/O error.");
    	    }	    	   
     
    	}
     
    	public static void FromServer() throws IOException {
    		String fromServer;
     
    		// Creation du buffer
    		try {
    			in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));
    		} catch (IOException e) {
                System.err.println("I/O error.");
    	    }
     
    		// Lire et afficher ce que dit le serveur
            while ((fromServer = in.readLine()) != null) {
                System.out.println("Server says: " + fromServer);
    		}
    	}
     
    	public static void ToServer() throws IOException {
    		String fromUser;	            
     
    		// CrŽation des buffers
            try {
            	out = new PrintWriter(kkSocket.getOutputStream(), true);
    	    	user = new BufferedReader(new InputStreamReader(System.in));
    	    	out.println("Connection OK");
    	    } catch (IOException e) {
                System.err.println("I/O error.");
    	    }
     
    	    // Lire ce que frappe l'utilisateur et l'envoyer au serveur
    	    while ((fromUser = user.readLine()) != null) {
                out.println(fromUser);
    		}
    	}
     
    	public void Disconnection() throws IOException {	
    		out.close();
    	    in.close();
    	    kkSocket.close();
    	}
     
    	public static void main(String[] args) throws IOException {
    		Connection();
     
    		FromServer();
    		ToServer();
    	}
    }
    Dans les 2 cas, il y a un sous-programme pour établir la connexion, un autre pour recevoir, et un 3eme pour envoyer (plus un 4eme pour se déconnecter).

    Voila mes problèmes :
    1) Je dois trouver un moyen de lancer en même temps "ToClient()" et "FromClient()" qui contiennent tous les 2 une boucle while.

    2) Tant que le pb 1 n'est pas résolu, chaque ordi peut soit envoyer, soit recevoir suivant l'ordre où sont appelés les sous-programmes, mais :
    - Lorsque le serveur reçoit et le client envoi : Aucun soucis
    - Lorsque le serveur envoit et le client reçoit, j'ai ce message d'erreur sur le server :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Waiting for Client... (est affiché mais ne fait pas partie du message d'erreur)
    Exception in thread "main" java.lang.NullPointerException
    	at Server.ToClient(Server.java:53)
    	at Server.main(Server.java:67)
    et celiu-ci sur le client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Connected to 192.168.1.3 (est affiché mais ne fait pas partie du message d'erreur)
    Exception in thread "main" java.net.SocketException: Connection reset
    	at java.net.SocketInputStream.read(SocketInputStream.java:168)
    	at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:411)
    	at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:453)
    	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:183)
    	at java.io.InputStreamReader.read(InputStreamReader.java:167)
    	at java.io.BufferedReader.fill(BufferedReader.java:136)
    	at java.io.BufferedReader.readLine(BufferedReader.java:299)
    	at java.io.BufferedReader.readLine(BufferedReader.java:362)
    	at Client.FromServer(Client.java:32)
    	at Client.main(Client.java:62)
    Est-ce une erreur dans le code ou bien est-ce que le server ne peut QUE ecouter et le client QUE envoyer ? dans ce cas il me faudrait une classe Server et une classe Client sur chaque ordi ce qui va être source de beaucoup de complications...

    Voila j'espère avoir été assez précis. Si quelqu'un a une idée.

    Merci d'avance

    Mad

  2. #2
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Avant de te lancer dans les socket, une petite révision des bases du language :
    POUR COMPARER DEUX CHAINES DE CARACTERES, IL NE FAUT PAS UTILISER LES OPERATEURS != OU == MAIS LA METHODE equals() DE LA CLASSE STRING !!!

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/08/2006, 15h10
  2. [Socket] Probleme entre un Client C et un serveur JAVA
    Par bpy1401 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 28/02/2006, 08h40
  3. Fin de conversation entre client et serveur
    Par Stany dans le forum C++
    Réponses: 2
    Dernier message: 15/07/2005, 11h07
  4. Connexion entre deux ordi [Débutant]
    Par Ryadus dans le forum Développement
    Réponses: 2
    Dernier message: 12/06/2003, 21h47
  5. Réponses: 5
    Dernier message: 25/03/2003, 19h43

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