Socket exception
helloworld
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
J'ai l'exception suivante : java.net.SocketException: Socket closed
Je ne comprend pas pourquoi.. dans mon code je n'ai même pas fermer le socket.
Le server s'execute correcetement et au moment ou je connecte le client l'execption est levé.
Serveur
Client
J'ai l'exception suivante : java.net.SocketException: Socket closed
Je ne comprend pas pourquoi.. dans mon code je n'ai même pas fermer le socket.
Le server s'execute correcetement et au moment ou je connecte le client l'execption est levé.
Serveur
try (ServerSocket serverSocket = new ServerSocket(12341)) {
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("New client connected");
ServerThread thread = new ServerThread(clientSocket); // extends thread
thread.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
Client
try (Socket socket = new Socket("localhost", 12341)) {
ClientThread thread = new ClientThread(socket); //extends thread
thread.start();
thread.send("Bonjour");
} catch (IOException e) {
e.printStackTrace();
}
}
Configuration: Windows / Chrome 71.0.3578.98
A voir également:
- Socket closed
- Remote side unexpectedly closed network connection ✓ - Forum Réseau
- Socket 1366 ✓ - Forum Matériel & Système
- Err-connection-closed ✓ - Forum Microsoft Edge / Internet Explorer
- Error 2002 (hy000): can't connect to local server through socket '/run/mysqld/mysqld.sock' (2) - Forum Linux / Unix
- Error 2002 (hy000): can't connect to local mysql server through socket '/var/run/mysqld/mysqld.sock' (2) - Forum Bases de données
1 réponse
Petite précision l'exception est toujours levé dans mon thread gérant le coté client
public void run() {
try {
String message = null;
if (in.readObject() != null) { //exception ici
message = (String) in.readObject();
System.out.println(message);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Le close est automatique à la fin d'un try-with-resources (c'est d'ailleurs le seul intérêt de cette écriture).
Dans quel ordre tu démarres tes programmes ?
Il faut que le serveur fonctionne avant que les clients se connectent sinon le programme client va planter.
C'est comme si la ressource ce fermait avant l'envoye du message dans la méthode run? C'est possible ?
try (Socket socket = new Socket("localhost", 12343)){ ClientThread thread = new ClientThread(socket); //extends thread thread.start(); thread.send("salut"); } catch (IOException e) { e.printStackTrace(); } }Voici tout mon code :
Client
public class Client { public static void main(String[] args) { try { Socket socket = new Socket("localhost", 12455); ClientThread thread = new ClientThread(socket); thread.start(); thread.send("Salut"); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }Server
public class Server { public static void main(String[] args) { try { ServerSocket serverSocket = new ServerSocket(12455); Socket clientSocket = serverSocket.accept(); System.out.println("New connection is made on port " + clientSocket.getLocalPort()); ServerThread thread = new ServerThread(clientSocket); thread.start(); } catch (IOException e) { e.printStackTrace(); } } }thread coté client qui envoye et recoit les messages
public class ClientThread extends Thread { private ObjectOutputStream output; private ObjectInputStream input; public ClientThread(Socket socket) { try { output = new ObjectOutputStream(socket.getOutputStream()); output.flush(); input = new ObjectInputStream(socket.getInputStream()); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { try { System.out.println("Server : " + input.readObject()); //Exception levé ici } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void send(String message) { try { output.writeObject(message); output.flush(); output.close(); } catch (IOException e) { e.printStackTrace(); } } }thread coté serveur qui envoye et recoit les messages
public class ServerThread extends Thread { private ObjectOutputStream output; private ObjectInputStream input; public ServerThread(Socket socket) { try { output = new ObjectOutputStream(socket.getOutputStream()); output.flush(); input = new ObjectInputStream(socket.getInputStream()); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { try { System.out.println("Client : " + input.readObject()); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void send(String message) { try { output.writeObject(message); output.flush(); output.close(); } catch (IOException e) { e.printStackTrace(); } } }Il faudrait déjà expliquer ce que tu cherches à faire avec ton client et ton serveur, mais pour moi le client envoie un message et le serveur le reçoit (ok), le serveur n'envoie pas de message donc le client ne reçoit rien (ok ?)