C'est la première fois que je programme un socket.
Mon exigence est que le client android pose une question et reçoive la réponse du serveur ubuntu via socket.
Dans mon côté client, je crée à la fois BufferedInputStream et BufferedInputStream à partir de mon socket.BufferedOutputStream.close() laissera BufferedInputStream être fermé?
Socket client = new Socket();
InetSocketAddress isa = new InetSocketAddress(my_host, 8888);
client.connect(isa, 10000);
inputStream = new BufferedInputStream(client.getInputStream());
outputStream = new BufferedOutputStream(client.getOutputStream());
Je l'expérience d'un comportement étrange: Comme mon client envoie la demande de outputStream et appeler sa proximité(), puis appelez inputStream.read() va se java.net.SocketException: Socket est fermé erreur . Mais mon client.isConnected() retourne toujours vrai.
try {
outputStream.write("who_are_you".getBytes());
outputStream.flush();
outputStream.close(); // inputStream will be invalid if I call this line.
Log.i(TAG, "client: " + client.isConnected()); // client still return true
byte[] b = new byte[1024];
String data = "";
int length;
// I will receive java.net.SocketException: Socket is closed as I call below code
while ((length = inputStream.read(b)) > 0) // If length <= 0, it means exit.
{
Log.i(TAG, "receive message, length: " + length);
data += new String(b, 0, length);
Log.i(TAG, "receive message: " + data);
}
} catch (java.io.IOException e) {
Log.w(TAG, "socket connection fail");
e.printStackTrace();
}
Je sais que je peux éviter cela si je n'appelle pas outputStream.close(). Mais je suis juste très curieux de savoir pourquoi cela arrive? Est-ce un résultat normal?
Oui, si vous fermez un flux, les autres flux seront également fermés. Et la prise. – greenapps
Fermez votre flux dans le bloc finally – HomeIsWhereThePcIs
Avez-vous vérifié le serveur en cas de fermeture accidentelle de la connexion? – Robert