Programmation réseau - Initialiser la connexion
Bonjour,
Je suis bloqué sur mon projet de communication réseau. Voiçi mon code côté serveur :
Serveur.java
Code:
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
| /*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Nicolas
*/
public class Serveur extends Thread
{
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(4455);
System.out.println("Serveur:"+server+" en écoute sur le port: "+ server.getLocalPort()+" est lancé");
while (true) {
Socket connexion = server.accept();
System.out.println("Serveur connexion avec: "+ connexion);
Thread echo=new ServeurThread(connexion);
echo.start();
}
}catch (IOException ex) {
System.out.println("le port 4455 est occupé");
System.out.println("On suppose donc que le service est lancé");
}
}
} |
ServeurThread.java
Code:
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
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketException;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Nicolas
*/
public class ServeurThread extends Thread {
Socket connexion;
IOServeur server;
public ServeurThread(Socket connexion) {
this.connexion=connexion;
server = new IOServeur();
}
public void run() {
while (true) {
String ligne;
ligne = server.lireClient();
server.ecrireServeur("Serveur a reçu: "+ligne+" de "+connexion);
server.FlushLine();
server.ecrireClient("Bien reçu");
if (ligne.equals("."))
server.close();
break;
}
}
} |
IOServeur.java
Code:
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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Nicolas
*/
class IOServeur {
private BufferedReader lectureServeur;
private PrintStream ecritureServeur;
private BufferedReader lectureClient;
private PrintStream ecritureClient;
private Socket client;
public IOServeur(){
ecritureServeur = System.out;
lectureServeur = new BufferedReader(new InputStreamReader(System.in));
//Reseau
try {
lectureClient = new BufferedReader(new InputStreamReader(client.getInputStream()));
} catch (IOException ex) {
Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
}
try {
ecritureClient = new PrintStream(client.getOutputStream(),true);
} catch (IOException ex) {
Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void ecrireServeur(String texte){
ecritureServeur.print(texte);
}
public String lireServeur(){
try {
return(lectureServeur.readLine());
} catch (IOException ex) {
Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
}
return "Erreur : rien à dire";
}
//RESEAU
public void ecrireClient(String texte){
ecritureClient.println(texte);
}
public String lireClient(){
try {
return(lectureClient.readLine());
} catch (IOException ex) {
Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
}
return "Erreur : impossible de recupérer un autre message";
}
public void close(){
try {
lectureClient.close();
} catch (IOException ex) {
Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
}
ecritureClient.close();
try {
lectureServeur.close();
} catch (IOException ex) {
Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
}
ecritureServeur.close();
}
public void FlushLine() {
try {
lectureClient.readLine();
} catch (IOException ex) {
Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
}
}
} |
Le problème survient dans IOServeur.java. A la connexion du client (donc transmission du socket, tout se déroule comme prévu, mais ça bloque dans IOServeur.java à la ligne 36. Il ne trouve pas lInputStream client. Par analogie, je suppose qu'il y a le même souàçis dans le OutputStream client.
ERREUR :
Code:
1 2 3 4 5
| Exception in thread "main" java.lang.NullPointerException
at IOServeur.<init>(IOServeur.java:36)
at ServeurThread.<init>(ServeurThread.java:28)
at Serveur.main(Serveur.java:30)
Java Result: 1 |
Merci d'avance.