web-dev-qa-db-fra.com

Socket fermé exception

J'ai écrit un exemple simple de serveur et de client, comme ci-dessous. 

Client :

  • Ouvrir une connexion 
  • Obtenir le flux de sortie, écrire dans le flux et fermer le flux de sortie
  • Récupère le flux d'entrée et lit le flux. Obtenir une exception à ce stade

    public class DateServer {
    public static void main(String[] args) throws InterruptedException {
    ServerSocket serverSocket = null;
    Socket client = null;
    try {
        serverSocket = new ServerSocket(6013);
        while (true) {
            client = serverSocket.accept();
            OutputStream outputStream = client.getOutputStream();
            InputStream inputStream = client.getInputStream();
    
            System.out.println("" + outputStream + "-" + inputStream);
    
            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(inputStream));
    
            String line = null;
            while ((line = bufferedReader.readLine()) != null) {
                System.out
                        .println("Message recieved from client ::" + line);
            }
    
            PrintWriter printWriter = new PrintWriter(outputStream, true);
    
            printWriter.println(new Java.util.Date().toString());
    
            client.close();
        }
    } catch (IOException exception) {
        exception.printStackTrace();
        System.err.println(exception);
    }
        }
    
        }
    

Client :

    public class DateClient {

public static void main(String[] args) throws UnknownHostException,
        IOException, InterruptedException {
    Socket sock = new Socket("127.0.0.1", 6013);
    OutputStream outputStream = sock.getOutputStream();
    InputStream inputStream = sock.getInputStream();

    System.out.println("" + outputStream + "-" + inputStream);

    PrintWriter printWriter = new PrintWriter(outputStream, true);
    printWriter.println("Hi Server");

    outputStream.close();

    System.out.println(sock.isConnected());

    BufferedReader bufferedReader = new BufferedReader(
            new InputStreamReader(inputStream));
    String line;
    while ((line = bufferedReader.readLine()) != null) { // Exception 
        System.out.println(line);
    }

}

}

Obtenir une exception socket fermée dans Client. Pourriez-vous s'il vous plaît laissez-moi savoir quelle serait la raison.

  Exception in thread "main" Java.net.SocketException: Socket closed
at Java.net.SocketInputStream.socketRead0(Native Method)
at Java.net.SocketInputStream.read(SocketInputStream.Java:146)
at Sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.Java:282)
at Sun.nio.cs.StreamDecoder.implRead(StreamDecoder.Java:324)
at Sun.nio.cs.StreamDecoder.read(StreamDecoder.Java:176)
at Java.io.InputStreamReader.read(InputStreamReader.Java:184)
at Java.io.BufferedReader.fill(BufferedReader.Java:153)
at Java.io.BufferedReader.readLine(BufferedReader.Java:316)
at Java.io.BufferedReader.readLine(BufferedReader.Java:379)
at edu.iub.cs.httpserver.DateClient.main(DateClient.Java:32)
6
Abhilash

Le socket Java.net.SocketException est fermé Cette exception signifie que vous avez fermé le socket, puis continué à essayer de l'utiliser.

os.close();

Et vous l'avez fermé ici. La fermeture du flux d’entrée ou de sortie d’un Socket ferme l’autre flux et le Socket.

10
Todd Jefferson

Java.net.SocketException survient uniquement lorsque vous fermez le socket OutputStream (ou) avant de lire à partir du serveur.

Dans votre code, supprimez: 

OutputStream.close(); 

et puis essayez ..

2
user3003435