J'ai une application qui est basée sur l'interaction serveur-clients multiples.C'est le thread que j'utilise dans la classe serveur pour créer un nouveau thread où j'accepte tous les nouveaux sockets:Java get ObjectInputStream ObjectOutputStream à partir d'un socket
Thread acceptingThread = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Socket s = serverSocket.accept();
listaSocket.add(s);
listaOis.add(new ObjectInputStream(s.getInputStream()));
listaOos.add(new ObjectOutputStream(s.getOutputStream()));
System.out.println("Client connected");
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
});
acceptingThread.start();
private ServerSocket serverSocket;
private ArrayList<Socket> listaSocket;
private ArrayList<ObjectInputStream> listaOis;
private ArrayList<ObjectOutputStream> listaOos;
les lignes qui bloquent les programmes sont les suivants:
listaOis.add(new ObjectInputStream(s.getInputStream()));
listaOos.add(new ObjectOutputStream(s.getOutputStream()));
Lire le javadoc du constructeur de ObjectInputStream. –
Je pense que serverSocket.accept() bloque le programme, il attend une nouvelle requête à venir. –
Dans mon client, je crée un socket qui se connecte à ce serveur. Dans s je reçois le socket du client .ObjectInputStream prend un InputStream dans son constructeur. J'obtiens ça de s.getInputStream() – Cristian