Java et le chat

Fermé
micmic - 28 mai 2002 à 22:33
 nadia - 2 juin 2004 à 10:54
Salut à tous
Je suis en train d'apprendre Java et je voudrai savoir si il existe de bons livres qui partent d'un niveau plutot bas et qui explique comment mettre en place une applet de chat sur son site.

Merci d'avance pour tous ceux qui me répondront

MIcmic
A voir également:

3 réponses

salut,

j'ai un exemple de programme de chat en java mais ce n'est pas une applet. Cependant, le principe est le même: ouverture et fermeture de socket. Il faut donc s'informer un peu sur la notion de socket et de port. Un bon moyen pour progresser...

=================================
/********************************************************************************************************
/ Sorte de "chat" (2001)
/
/----------------------------------------mat-------------------------------------------------
/
/
/ PRINCIPE: Le programme permet de se connecter sur le port d'un ordinateur distant, et d'envoyer
/ des messages sur ce même port.
/ On peut également recevoir des messages envoyé sur un port de notre ordinateur que
/ l'on aura au préalable ouvert.
/ Une fois les connexions établies, il est possible de communiquer entre les deux
/ ordinateurs comme un programme de chat.
/
/ CARACTERISTIQUES: le programme est constitués d'un thread pour l'émission et d'1 autre pour la
/ récéption. Il est possible de changer le Look&Feel.
/
/ UTILISATION: Pour recevoir des messages, il faut indiquer un port local de réception et cliquer
/ sur "Ecouter". Pour envoyer des messages, il est nécessaire d'abord de créer un
/ socket en indiquant les port et nom de la bécane sur laquelle on se connecte, puis
/ de cliquer sur "Créer Socket". Apres on ecrit n'importe quoi et on envoie ("Envoyer")
/
*********************************************************************************************************/


import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;
import java.util.*;
import java.net.*;
import java.io.*;
import java.lang.*;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.border.*;
import javax.swing.colorchooser.*;
import javax.swing.plaf.metal.DefaultMetalTheme;
import javax.swing.plaf.metal.MetalLookAndFeel;

import javax.accessibility.*;




public class tp2
{

public static void main(String arg[])
{
JFrame win = new Fenetre();
win.show();
}
}


// la classe fenetre()
class Fenetre extends JFrame implements ActionListener
{



// le constructeur
public Fenetre()
{
// on met un titre
setTitle("Chat moi");

// on definit la taille
setSize(500, 400);

// on met un look and feel par defaut
updateLookAndFeel(metal);

// on gere l'appui sur la touche fermeture de la fenetre
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
} );

setLocation(100,100);


/******************************************************************
on indique le mode de placement des composants avec un Layout
Ici on utilise un Layout de type GridBagLayout ce qui permet
d'aligner les composants verticalement ou horizontalement, sans
qu'ils soient forcement de meme taille.
L'objet de type GridBagContraints permet d'apporter des
contraintes aux composants du Layout.

******************************************************************/

// on travaille avec des calques ou des panneaux
Container pane = getContentPane();

pane.setLayout(new GridBagLayout());

GridBagConstraints c = new GridBagConstraints();

/*****************************************************************
fill permet de déterminer s'il faut redimensionner le composant,
et ici uniquement horizontalement
******************************************************************/
c.fill = GridBagConstraints.HORIZONTAL;

/*****************************************************************
Ici on va ajouter des composants dans la fenetre. On utilise
plusieurs parametres:
- weightx:permet de redistribuer l'espace libre horizontal (s'il
y a) en fonction du "poids" du composant. Ainsi un composant
dont weightx vaudra zero n'aura pas d'espace en plus.
- gridx:indique la colonne où on place le composant
- gridy:indique la ligne où on place le composant

******************************************************************/

// permet de sauter une ligne par rapport au haut de la fenêtre
c.weightx = 0;
c.gridx = 0;
c.gridy = 0;
c.gridwidth=4;
c.gridheight=1;
JPanel p=new JPanel();
pane.add(p,c);


c.weightx = 0;
c.gridx = 0;
c.gridy = 1;
c.gridwidth=2;
c.gridheight=1;
//texte de saisie du message
JPanel labelpanel1=new JPanel();
JLabel l1=new JLabel("Ecrire le message à envoyer");
labelpanel1.add(l1);
pane.add(labelpanel1,c);

c.weightx = 0;
c.gridx = 2;
c.gridy = 1;
c.gridwidth=2;
c.gridheight=1;
// zone lecture
JPanel labelpanel2=new JPanel();
JLabel l2=new JLabel("Affichage des messages reçus");
labelpanel2.add(l2);
pane.add(labelpanel2,c);


c.fill = GridBagConstraints.BOTH;
c.weightx = 100;
c.weighty = 100;
c.gridx = 0;
c.gridy = 2;
c.gridwidth=2;
c.gridheight=1;
TextArea1=new JTextArea("");
TextArea1.setFont(new Font("TimesRoman",Font.BOLD,12));

pane.add(new JScrollPane(TextArea1),c);

c.weightx = 100;
c.weighty = 100;
c.gridx = 2;
c.gridy = 2;
c.gridwidth=2;
c.gridheight=1;
TextArea2=new JTextArea("");
TextArea2.setFont(new Font("TimesRoman",Font.ITALIC,12));

pane.add(new JScrollPane(TextArea2),c);


c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0;
c.weighty = 0;
c.gridx = 0;
c.gridy = 3;
c.gridwidth=1;
c.gridheight=1;
pane.add(new JLabel("Port:"),c);

c.weightx = 0;
c.gridx = 1;
c.gridy = 3;
c.gridwidth=1;
c.gridheight=1;
text2=new JTextField(20);
pane.add(text2,c);

c.weightx = 0;
c.gridx = 0;
c.gridy = 4;
c.gridwidth=1;
c.gridheight=1;
pane.add(new JLabel("Serveur: "),c);

c.weightx = 0;
c.gridx = 1;
c.gridy = 4;
c.gridwidth=1;
c.gridheight=1;
text3=new JTextField(20);
pane.add(text3,c);

c.weightx = 0;
c.gridx = 2;
c.gridy = 3;
c.gridwidth=1;
c.gridheight=2;
pane.add(new JLabel("Port: "),c);

c.weightx = 0;
c.gridx = 3;
c.gridy = 3;
c.gridwidth=1;
c.gridheight=2;
text4=new JTextField(20);
pane.add(text4,c);


c.weightx = 0;
c.gridx = 0;
c.gridy = 5;
c.gridwidth=2;
c.gridheight=1;
JPanel panel1=new JPanel();
button1=new JButton("< Envoyer >");
button1.setToolTipText("Cliquer ici pour envoyer le message");
button1.addActionListener(this);
panel1.add(button1);
pane.add(panel1,c);

c.weightx = 0;
c.gridx = 2;
c.gridy = 5;
c.gridwidth=2;
c.gridheight=1;
JPanel panel2=new JPanel();
button2=new JButton("Ecouter");
button2.setToolTipText("Cliquer ici pour lancer le serveur d'écoute");
button2.addActionListener(this);
panel2.add(button2);
pane.add(panel2,c);

c.weightx = 0;
c.gridx = 0;
c.gridy = 6;
c.gridwidth=4;
c.gridheight=1;
JPanel panel3=new JPanel();
button3=new JButton("Créer Socket client");
button3.setToolTipText("Cliquer ici pour créer le socket du client avant d'envoyer des messages");
button3.addActionListener(this);
panel3.add(button3);
pane.add(panel3,c);

c.weightx = 0;
c.gridx = 0;
c.gridy = 7;
c.gridwidth=4;
c.gridheight=1;
JPanel panel4=new JPanel();
JButton button4=new JButton("Quitter !");
button4.setToolTipText("Cliquer ici pour quitter le programme");
button4.addActionListener(this);
panel4.add(button4);
pane.add(panel4,c);




}





public void actionPerformed(ActionEvent e)
{
String cmd=e.getActionCommand();

if(cmd.equals("Créer Socket client"))
{

try
{

// client
Integer I1=new Integer(text2.getText());
Socket s=new Socket(text3.getText(),I1.intValue());
System.out.println("CLIENT> Socket client cree. Prêt à envoyer des messages\n");

this.button3.setText("< Socket crée >");
this.button1.setText("Envoyer");

// on cree l'objet out pour ecrire au travers du socket
out=new PrintWriter(s.getOutputStream());
}
catch(IOException ei)
{
System.out.println("\nAttention, erreur de socket\nVérifiez si le port n'est pas déjà utilisé\nVérifier le nom de la station hôte\n"+ ei+"\n");
}
}
if (cmd.equals("Quitter !"))
{
// Annulation
System.exit(0);
}

if(cmd.equals("Envoyer"))
{
out.println(TextArea1.getText());
System.out.println("CLIENT> Message envoyé au serveur\n");
// on libère la socket
out.flush();
//on réinitialise le champ du message
TextArea1.setText("");
}


if(cmd.equals("< Envoyer >"))
{
System.out.println("Il faut d'abord créer le socket avant d'envoyer un message\n");

}


if(cmd.equals("Ecouter"))
{
new Tache(TextArea2,text4);
}


}


// la fonction qui permet de changer de LookandFeel
public void updateLookAndFeel(String laf)
{
try
{
UIManager.setLookAndFeel(laf);
SwingUtilities.updateComponentTreeUI(this);
}
catch (Exception ex)
{
System.out.println("Failed loading L&F: " + laf);
System.out.println(ex);
}
}



private JTextField text2,text3,text4;
private JButton button3,button1,button2;
private JTextArea TextArea1,TextArea2;
private Tache t;
private PrintWriter out;

// Possible Look & Feels
private String mac = "com.sun.java.swing.plaf.mac.MacLookAndFeel";
private String metal = "javax.swing.plaf.metal.MetalLookAndFeel";
private String motif = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
private String windows = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";


}
class Tache extends Thread
{
JTextArea TextArea;
JTextField text;

public Tache(JTextArea TextArea2,JTextField text4)
{
this.TextArea=TextArea2;
this.text=text4;
// on lance le thread
start();
}

public void run()
{


try
{
// on cree un thread pour le server car il est bloquant
Integer I2=new Integer(text.getText());
serv=new ServerSocket(I2.intValue());
System.out.println("SERVEUR> Socket serveur crée. En Attente de message\n");
sin=serv.accept();
BufferedReader in=new BufferedReader(new InputStreamReader(sin.getInputStream()));
boolean done=false;

while(!done)
{ TextArea.append(in.readLine()+"\n");
System.out.println("SERVEUR> Message bien reçu\n");
}
}
catch(IOException ei)
{
System.out.println("erreur "+ ei+"\n");
}
}

private Socket sin;
private ServerSocket serv;


}

=====================================


-> on peut tester le programme sur une seule bécane si on ne dispose pas d'un réseau.

a+
mat
3
Mat

Merci beaucoup j'avoue que je ne m'attendais pas à autant de gentillesse. Je commence tout juste à aborder la notion de socket.

Ton code sera soigneusement décortiqué.

merci vraiment

A+ j'espere
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426
28 mai 2002 à 22:52
arf ca va etre dur mais tout et possible a qui le veux bien

une applet et pas le plus simple a mettre en place ensuite vient le servlet pas bcp plus simple alors en ce qui concerne le chat... c'est deja un niveau tres avancé de java moi je te conseillerai si t es vraiment motivé de commencer par "Au coeur de java 2 "vol-1 Notions fondamentales chez campus press ISBN : 2-7440-0620-3
avec celui la tu aurais des applets fonctionnelles
ensuit le volume 2 Fonctions Avancées du meme editeur ISBN : 2-7440-0881-8
la tu trouvera tout ce dont tu as besion sur le multithreading et l'implementation des serveurs(et tu en aura sans doute grand besoin) puis ensuite un book specialisé sur les servlets (ca peut etre utile mais c sans doute pas indispensable...) voila
si tu as besion d info plus concrete sur Java n'hesite pas
0
Merci beaucoup aserve

Je vais voir sur alapage si ils ont ces deux bouquins. Oui clairement java n'est pas facile je n'ai pour l'instant rien develloppé je ne fais que lire. Mais c'est manifestement un langage puissant. Ils ont tout juste sorti la version 1.4 et je me demande ce qu'elle a de plus que la 1.2. Des qu'il sagit de Java j'ai surtout des questions pas beaucoup de réponse :(

A ++

MIcmic
0
j'essaie de créee un chat en java;j'ai un program cleint et un program serveur;mais au niveau de l'exécution je ne sais pas comment my prendre,comment fauut il configurer la machine et créer un serveur ,pr que tt marche??
0