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
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
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(); } }
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).
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; // Cration 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(); } }
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 :
et celiu-ci sur le client :
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)
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...
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)
Voila j'espère avoir été assez précis. Si quelqu'un a une idée.
Merci d'avance
Mad
Partager