J'ai écrit un exemple simple de serveur et de client, comme ci-dessous.
Client :
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)
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.
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 ..