/* Dans un version plus récente(la finale) située malheuresement sur mon autre ordinateur, j'avais implementé un marqueur de fin de ligne(du genre [END]) car lors de l'affichage, on s'aperçois de l'apparition de caractères [] pour chaque octet vide reçus, soit 2048 moins la longueur du message, ce qui fait beaucoup... */
public class Conversation implements Runnable, ActionListener {
GridBagConstraints gbc = new GridBagConstraints();
JTextArea area = new JTextArea(); //affichage des messages
int port = 5000; //port par défaut
String destinataire = "OEMComputer"; //destinataire par defaut(en fait le nom de ma machine)
JTextField field = new JTextField(15); //champ où entrer le message
Thread thread;
JFrame frame = new JFrame("Yann Messenger v1.0");
JButton button2;
//renvoi le nom local
public String localHost() {
try {
return InetAddress.getLocalHost().getHostName();
}
catch (UnknownHostException uhe) {
return "moi";
}
}
//méthode ajoutant des composants aux coordonnées souhaités
private void addGB(Container cont, Component comp, int x, int y) {
gbc.gridx = x; gbc.gridy = y;
cont.add(comp, gbc);
}
//methode envoyant un message
private void sendMessage(String msg) {
try {
byte data[] = msg.getBytes(); //transormation en octets
InetAddress addresse = InetAddress.getByName(destinataire);
DatagramPacket pack =
new DatagramPacket(data, data.length, addresse, port);
DatagramSocket socket = new DatagramSocket();
socket.send(pack);
socket.close();
area.append("\n" + localHost() + " : " + msg);
}
catch (UnknownHostException e) {
JOptionPane.showMessageDialog(frame, "Erreur : impossible de trouver la machine", "Erreur de Connexion", JOptionPane.ERROR_MESSAGE);
//on demande la saisi d'un autre destinataire
String passMsg2 = "Saisissez le nom de la machine du destinataire";
JTextField hostField2 = new JTextField();
hostField2.setText(destinataire);
int result2 = JOptionPane.showOptionDialog(frame, new Object[] { passMsg2, hostField2 }, "Connexion - destinataire", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null);
if(result2 == JOptionPane.OK_OPTION) {
destinataire = hostField2.getText();
}
}
catch (SocketException e2) {
JOptionPane.showMessageDialog(frame, "Erreur interne : echec de l'envoi du message", "Erreur de Connexion", JOptionPane.ERROR_MESSAGE);
System.out.println(e2); //log
}
catch (IOException e3) {
JOptionPane.showMessageDialog(frame, "Erreur interne : echec de l'envoi du message", "Erreur de Connexion", JOptionPane.ERROR_MESSAGE);
System.out.println(e3); //log
}
}
private void ecouter() {
try {
DatagramSocket s = new DatagramSocket(port);
//capacité de 2048 caractères
DatagramPacket pack =
new DatagramPacket(new byte[2048], 2048);
s.receive(pack);
String message = new String(pack.getData());
area.append("\n" + pack.getAddress().getHostName() + " : " + message);
}
catch (SocketException e4) {
JOptionPane.showMessageDialog(frame, "Erreur interne : echec de la réception d'un message", "Erreur de Connexion", JOptionPane.ERROR_MESSAGE);
System.out.println(e4);
}
catch (IOException e5) {
JOptionPane.showMessageDialog(frame, "Erreur interne : echec de la réception d'un message", "Erreur de Connexion", JOptionPane.ERROR_MESSAGE);
System.out.println(e5);
}
}