OVH Cloud OVH Cloud

Server: créer une connection

2 réponses
Avatar
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

2 réponses

Avatar
nioubi
julien wrote:
Je n'ai pas encore de client, donc je teste mon server avec telnet
(telnet localhost 12345).
Bonjour,

le probleme c'est que tu utilises des flux objets qui exigent leur
propre format (cf serialisation) alors que telnet discute en mode texte.

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();


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();}
}
}

Avatar
julien
nioubi wrote:
julien wrote:

Je n'ai pas encore de client, donc je teste mon server avec telnet
(telnet localhost 12345).


Bonjour,
le probleme c'est que tu utilises des flux objets qui exigent leur
propre format (cf serialisation) alors que telnet discute en mode texte.

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