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 :

Problème d'un débutant en java avec un client IRC


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Par défaut Problème d'un débutant en java avec un client IRC
    Bonjour à tous, et merci par avance à tous ceux qui vont me lire
    Voila, je suis en troisième année de licence informatique, et je souhaite faire un client IRC à mes temps perdus. J'ai donc commencé à faire quelques lignes de code, et je suis tombé sur un problème pour moi insolvable, mais qui je suis sûr pour vous paraîtra très simple, mais il faut bien débuter un jour .
    Donc voila, mon problème est le suivant, j'arrive bien à me connecter et reçoit une réponse de la part du server auquel je me connecte, mais ensuite, il faut bien suivre le protocole, et comme je suis quelqu'un de poli, je veux me présenter à mon interlocuteur en précisant qui je suis, rien de plus normal, c'est ce que j'ai commencé à faire sur ce post .
    Donc voila, ensuite j'ai des réponses qui s'affichent, qui semblent me dire que tout se passe bien, mais après c'est le drame, je n'ai pas réellement compris comment remplir tout les champs de USER (après plusieurs heures de recherche, j'ai toujours pas ma réponse, c'est pourquoi, il n'apparaît pas encore dans mon code), et le plus horrible par dessus tout, lors de l'envoie du message PING par le serveur, il semble être insensible à mes PONG :'(.
    Bref, tout ça pour vous dire que je ne sais pas quoi faire, et que j'aurais grandement besoin de votre aide.
    Voici donc mon code, et ci-après les réponses du 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
    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;
     
    import javax.swing.JEditorPane;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
     
    public class Irc 
    {
    	public static JFrame f;
    	public static void main (String args[]) throws UnknownHostException, IOException
    	{
    		f = new JFrame();
    		f = creationFenetre();
    		f.setVisible(true);
    		if(connexion("irc.epiknet.org")==true)
    		{
    			System.out.println("Connexion réussi");
    		}
    		else
    		{
    			System.out.println("Epik fail");
    		}
    	}
     
    	/* fonction pour créer la fenêtre de chat */
    	public static JFrame creationFenetre()
    	{
    		JFrame w = new JFrame();
    		JPanel p = new JPanel();
    		/* servira a afficher la liste des connectes */
    		JEditorPane co = new JEditorPane();
    		co.setSize(190,430);
    		co.setEditable(false);
    		/* servira a afficher la discussion */
    		JEditorPane disc = new JEditorPane ();
    		disc.setSize(600,430);
    		disc.setName("disc");
    		disc.setAutoscrolls(true);
    		disc.setEditable(false);
    		/* sera la zone ou l'utilisateur tapera son texte */
    		JEditorPane edit = new JEditorPane();
    		edit.setSelectedTextColor(Color.yellow);
    		p.setLayout(new BorderLayout());
    		/* on positionne les 3 champs fraichement créés */
    		p.add(co,BorderLayout.WEST);
    		p.add(disc,BorderLayout.EAST);
    		p.add(edit,BorderLayout.SOUTH);
     
    		w.setTitle("Irc v0.0");
    		w.setResizable(false);
    		Dimension d = new Dimension(800,500);
    		w.setSize(d);
    		w.setContentPane(p);
    		w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		return w;
    	}
     
    	public static boolean connexion(String serv) throws UnknownHostException, IOException
    	{
    		Thread thread = new Thread();
    		try
    		{
    			Socket s = new Socket(serv,6667);
    			String str;
    			String temp;
    			String nick="test_de_nick_avec_toto";
    	        BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
    	        PrintWriter output = new PrintWriter(s.getOutputStream());
    	        /* envoie de la commande NICK */
    	        output.println("NICK "+nick);
    	        while(thread != null && (str = input.readLine()) != null)
    	        {
    	        	/* test pour savoir si le message recu est un message PING */
    	        	if (str.indexOf("PING")==0)
    	        	{
    	        		String temp2[]= str.split(":");
    	        		output.println("PONG :"+temp2[1]);
    	        		output.flush();
    	        	}
    	        	else
    	        	{
    		        	/* sinon on traite le message */
    	        		/* on récupère les anciens message*/
    		        	temp=((JEditorPane)f.getContentPane().getComponents()[1]).getText();
    		        	temp+="\n";
    		        	temp+=str;
    		        	/* et on les réaffiche avec le nouveau en plus */
    		        	((JEditorPane)f.getContentPane().getComponents()[1]).setText(temp);
    	        	}
    	        }
    			return(true);
    		}
    		catch(UnknownHostException e)
    		{
    			System.out.println("Erreur lors de la connexion");
    			return(false);
    		}
     
    	}
    }
    Et maintenant comme promis, les réactions de mon interlocuteur :
    :courbevoie.fr.epiknet.org NOTICE AUTH :*** Looking up your hostname...
    :courbevoie.fr.epiknet.org NOTICE AUTH :*** Checking ident...
    :courbevoie.fr.epiknet.org NOTICE AUTH :*** Found your hostname
    :courbevoie.fr.epiknet.org NOTICE AUTH :*** No ident response; username prefixed with ~
    ERROR :Closing Link: [195.13.58.57] (Ping timeout)

  2. #2
    Membre très actif Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Par défaut
    Bonjour a toi,

    Je ne sais pas si ca peu t'aider mais j'ai trouver un peu de doc ici: http://abcdrfc.free.fr/rfc-vf/rfc1459.html

    Cordialement

  3. #3
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Par défaut
    Je te remercie pour ce lien, mais j'avais déjà regardé, il est effectivement très bien, mais il ne résout pas mon problème malheureusement.

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par Ikit LaGriffe Voir le message
    Je te remercie pour ce lien, mais j'avais déjà regardé, il est effectivement très bien, mais il ne résout pas mon problème malheureusement.
    Dommage, car le lien présente le protocole complet avec les grammaires. On ne pourra pas t'aider plus
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Par défaut
    La grammaire est la même que sur d'autres sites où j'ai fait des recherches, et je ne pense pas que ça vienne de là du coup, et je ne pense pas que ça vienne d'irc non plus, donc je pense qu'il y a quelque chose dans mon code qui ne marche pas, mais je n'arrive vraiment pas à voir quoi, et encore moins pourquoi

  6. #6
    Membre chevronné Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2003
    Messages : 457
    Par défaut
    Bonjour,

    Ta gestion du Thread dans la méthode connexion() me semble hasardeuse.
    Tu n'utilise pas le Thread de la bonne façon :
    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
     
    Thread thread = new Thread() {
                @Override
                public void run() {
                    try
                    {
                        Socket s = new Socket(serv,6667);
                        String str;
                        String temp;
                        String nick="test_de_nick_avec_toto";
                        BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
                        PrintWriter output = new PrintWriter(s.getOutputStream());
                        /* envoie de la commande NICK */
                        output.println("NICK "+nick);
                        while((str = input.readLine()) != null)
                        {
                            /* test pour savoir si le message recu est un message PING */
                            if (str.indexOf("PING")==0)
                            {
                                String temp2[]= str.split(":");
                                output.println("PONG :"+temp2[1]);
                                output.flush();
                            }
                            else
                            {
                                /* sinon on traite le message */
                                /* on récupère les anciens message*/
                                temp=((JEditorPane)f.getContentPane().getComponents()[1]).getText();
                                temp+="\n";
                                temp+=str;
                                /* et on les réaffiche avec le nouveau en plus */
                                ((JEditorPane)f.getContentPane().getComponents()[1]).setText(temp);
                            }
                        }
    //                    return(true);
                    }
                    catch(Exception e)
                    {
                       e.printStackTrace();
                        System.out.println("Erreur lors de la connexion");
    //                    return(false);
                    }
                }
            };
    thread.start();
    Pour créer un thread, il faut redéfinir la méthode run(), et appeler la méthode start() pour lancer le thread.

    Je te conseille de lire une doc sur les Thread en Java (voir la section tutoriels).

    A+
    Gronono

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/12/2013, 10h31
  2. Réponses: 0
    Dernier message: 10/12/2012, 12h12
  3. problème de connection java avec postgres
    Par jayfaze dans le forum JDBC
    Réponses: 3
    Dernier message: 22/01/2007, 23h46
  4. Réponses: 1
    Dernier message: 09/05/2006, 15h02
  5. [Plugin][Débutant] Lancement d'une appli Java avec un plugin
    Par antares24 dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 29/07/2004, 14h18

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