Server: créer une connection
Le
julien
Bonjour
J'essaye de créer un server basique:
connection = server.accept();
getStreams();
processConnection();
closeConnection();
avec
private void getStreams() throws IOException {
output = new ObjectOutputStream(connection.getOutputStream());
output.flush();
input = new ObjectInputStream(connection.getInputStream());
}
private void processConnection() throws IOException {
try {
//send Welcome message
output.writeObject("Welcome to the file server!");
output.flush();
System.out.println("Welcome message sent");
}
catch (IOException io) {
System.out.println("Error!");
}
private void closeConnection() {
try {
output.close();
input.close();
connection.close();
}
catch(IOException io) {
io.printStackTrace();
}
}
Je n'ai pas encore de client, donc je teste mon server avec telnet
(telnet localhost 12345).
La connection se fait correctement, mais quand je rentre du texte avec
telnet et appuie sur "entrée", le serveur crée bien output, flush
output, mais une bute sur input = new
ObjectInputStream(connection.getInputStream()); et ferme la connection.
Puis message d'erreur: java.lang.NullPointerException pour input.close();
Je ne comprends pas ce comportement.
Merci
Julien
J'essaye de créer un server basique:
connection = server.accept();
getStreams();
processConnection();
closeConnection();
avec
private void getStreams() throws IOException {
output = new ObjectOutputStream(connection.getOutputStream());
output.flush();
input = new ObjectInputStream(connection.getInputStream());
}
private void processConnection() throws IOException {
try {
//send Welcome message
output.writeObject("Welcome to the file server!");
output.flush();
System.out.println("Welcome message sent");
}
catch (IOException io) {
System.out.println("Error!");
}
private void closeConnection() {
try {
output.close();
input.close();
connection.close();
}
catch(IOException io) {
io.printStackTrace();
}
}
Je n'ai pas encore de client, donc je teste mon server avec telnet
(telnet localhost 12345).
La connection se fait correctement, mais quand je rentre du texte avec
telnet et appuie sur "entrée", le serveur crée bien output, flush
output, mais une bute sur input = new
ObjectInputStream(connection.getInputStream()); et ferme la connection.
Puis message d'erreur: java.lang.NullPointerException pour input.close();
Je ne comprends pas ce comportement.
Merci
Julien

Poser une question


le probleme c'est que tu utilises des flux objets qui exigent leur
propre format (cf serialisation) alors que telnet discute en mode texte.
2 solutions : soit utiliser des flux Reader et Writer pour du texte
mais ça ne semble pas être le but, soit avoir des 2 côtés des flux objet.
Un mini exemple de couple client serveur avec des flux objets :
///////////
// SERV
///////////
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Serv {
public static void main(String argv[]) {
try {
ServerSocket serverSock = new ServerSocket(12345);
Socket s = serverSock.accept();
ObjectOutputStream output = new
ObjectOutputStream(s.getOutputStream());
ObjectInputStream input = new ObjectInputStream(s.getInputStream());
output.writeObject("Welcome to the file server!");
output.flush();
String str = (String)input.readObject();
System.out.println("serv a recu: "+str);
output.close();
input.close();
s.close();
}
catch (Exception ex) { ex.printStackTrace();}
}
}
//------------------------------------------------------------
///////////
// CLNT
///////////
import java.io.*;
import java.net.Socket;
public class Clnt {
public static void main(String argv[]) {
try {
Socket s = new Socket("localhost", 12345);
ObjectOutputStream output = new
ObjectOutputStream(s.getOutputStream());
ObjectInputStream input = new ObjectInputStream(s.getInputStream());
output.writeObject("Bonjour");
output.flush();
String str = (String)input.readObject();
System.out.println("clnt a recu: "+str);
output.close();
input.close();
s.close();
}
catch (Exception ex) { ex.printStackTrace();}
}
}
Merci, mon serveur semble marché correctement. Il ne me reste plus qu'à
travailler sur mon "vrai" client.
Julien