View Single Post
  #1 (permalink)  
Old 03-16-2008, 07:40 PM
stessie stessie is offline
Member
 
Join Date: Feb 2008
Posts: 5
stessie is on a distinguished road
Help Java!!!!!!!!!!!!!!!!!
Bonjour,j'ai des difficultes à resoudre un problème Client/serveur,.il s'agit d'ecrire un serveur pour un chat de tel sorte que le client envoie un message au serveur et le serveur le renvoie à tous ceux qui sont connectés en ajoutant le nom de celui qui le lui a envoyé devant le message.J'ai essayé d'ecrire ce code mais je ne sais pas pourquoi ça ne compile pas et meme quand je l'ai d'abord compilé,le serveur ne reçevait pas de message.Help,c'est vraiment urgent que vous m'aidiez.voici le code que j'ai essayé d'ecrire.


package Chat;

import java.io.*;
import java.net.*;
import java.util.*;
public class ServerChat {
private ArrayList<Chatteur> listChatteur = null;
private ServerSocket serv = null;
static int port = 6667;
//ArrayList<Chatteur> copieList=null //n'est pas à sa place

private class Chatteur {
private Socket socket;
private OutputStream sockOut;
public Chatteur(Socket sock) throws IOException {
socket = sock;
sockOut = socket.getOutputStream();
}
public Socket getSocket() { return socket; }
public OutputStream getSockOut() { return sockOut; }
}


public static void main(String args[]) {
try{
ServerChat server = new ServerChat();
server.go();
} catch (Exception e) {
System.err.println("erreur server : "+e.getMessage());
}


}

public ServerChat() throws IOException {
serv = new ServerSocket(port);
listChatteur = new ArrayList();
while (true){
Chou client = new Chou();
client.start();
}
}

public void go() throws IOException {
for(; {
Socket socket = serv.accept();
System.out.println("connection de : "+socket);

synchronized(listChatteur) {
listChatteur.add(new Chatteur(socket));
}
}
}
}
private class Chou extends Thread{
public void run(){
BufferedReader sockIn = null;
String message = null;
ArrayList<Chatteur> copieList = null;
byte[] buffer = new byte[1024];
OutputStream sockOut = null;

sockIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true) {
try {
message = sockIn.readLine()+"\n";
} catch (IOException e) {
}
synchronized(listChatteur) {
copieList = (ArrayList<Chatteur>)listChatteur.clone();
}
buffer = message.getBytes();
for (Chatteur chatteur : copieList) {
try {
sockOut = chatteur.getSockOut();
System.out.println("Diffusion d'un message du socket : "+message+"/"+chatteur.getSocket());
sockOut.write(buffer, 0, message.length());
sockOut.flush();
} catch (IOException e2) {
listChatteur.remove(chatteur);
}
}
}
}
}




Le resultat doit etre de cette forme


connection de : Socket[addr=/127.0.0.1,port=59177,localport=6667]
diffusion d'un message du socket : Socket[addr=/127.0.0.1,port=59177,localport=6667] : stella : je
envoi au socket : Socket[addr=/127.0.0.1,port=59177,localport=6667]
diffusion d'un message du socket : Socket[addr=/127.0.0.1,port=59177,localport=6667] : stella : suis
envoi au socket : Socket[addr=/127.0.0.1,port=59177,localport=6667]
connection de : Socket[addr=/127.0.0.1,port=46547,localport=6667]
diffusion d'un message du socket : Socket[addr=/127.0.0.1,port=46547,localport=6667] : toto : oui
envoi au socket : Socket[addr=/127.0.0.1,port=59177,localport=6667]
envoi au socket : Socket[addr=/127.0.0.1,port=46547,localport=6667]
diffusion d'un message du socket : Socket[addr=/127.0.0.1,port=59177,localport=6667] : stella : java
envoi au socket : Socket[addr=/127.0.0.1,port=59177,localport=6667]
envoi au socket : Socket[addr=/127.0.0.1,port=46547,localport=6667]
diffusion d'un message du socket : Socket[addr=/127.0.0.1,port=46547,localport=6667] : toto : forums
envoi au socket : Socket[addr=/127.0.0.1,port=59177,localport=6667]
envoi au socket : Socket[addr=/127.0.0.1,port=46547,localport=6667]
diffusion d'un message du socket : Socket[addr=/127.0.0.1,port=46547,localport=6667] : toto : ainsi
envoi au socket : Socket[addr=/127.0.0.1,port=59177,localport=6667]
envoi au socket : Socket[addr=/127.0.0.1,port=46547,localport=6667]
diffusion d'un message du socket : Socket[addr=/127.0.0.1,port=59177,localport=6667] : stella : est il
envoi au socket : Socket[addr=/127.0.0.1,port=59177,localport=6667]
envoi au socket : Socket[addr=/127.0.0.1,port=46547,localport=6667]
diffusion d'un message du socket : Socket[addr=/127.0.0.1,port=46547,localport=6667] : toto : merci
envoi au socket : Socket[addr=/127.0.0.1,port=59177,localport=6667]
envoi au socket : Socket[addr=/127.0.0.1,port=46547,localport=6667]

sachant que :

Le client fait :
- le port utilisé est 6667
- le client saisit des messages en console et les envoie au serveur
- il envoie en caractère son_pseudo : message\n sur le socket et flush le tampon
- simultanément lit les messages qui arrivent et les affichent en console
- quand le client saisit q pour quitter, il envoie le message "au revoir" et ferme proprement
http://www.java-forums.org/images/smilies/confused.gif
tester le client marche avec telnet -e $ localhost 6667
merci de votre aide
Reply With Quote
Sponsored Links