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