2010-05-13 6 views
4

Je voudrais écrire quelques messages sur le serveur. Chaque fois, pour le tramsmitting seulement, je ferme le outputStream et le rouvre quand je dois envoyer le message suivant.Ecriture sur Socket outputStream sans fermeture

os.write(msgBytes); 
os.write("\r\n".getBytes()); 
os.flush(); 
os.close(); 

Comment puis-je conserver ce OutputStream Socket, os, ouvert et toujours être en mesure d'envoyer le message?

Merci.

Répondre

3

Il me manque quelque chose ici. Si vous n'appelez pas à proximité, il ne se fermera pas. Par exemple,

os.write(msgBytes); 
os.write("\r\n".getBytes()); 
os.flush(); 
// Do something 
os.write("more message"); 
os.flush(); 
// When you are finally done 
os.close(); 
1

Enroulez le 's OutputStream dans un PrintWriter et appelez le PrintWriter' Socket méthode de println.

PrintWriter pw = new PrintWriter(socket.getOutputStream()); 
.... 
pw.println(message); // call repeatedly to send messages. 
.... 
pw.close(); // when finished writing to server and want to close conn. 
2

Dans la plupart des protocoles, le serveur accepte certains types de symboles EOF. Envoyer un tel symbole au lieu de fermer le flux. Par exemple, les serveurs IRC interprètent «\ r \ n» comme la fin d'un message. Par exemple, les serveurs IRC interprètent «\ r \ n» comme la fin d'un message. Ce serait 2 messages sur un OutputStream ouvert:

PrintStream printStream = new PrintStream(socket.getOutputStream()); 
printStream.print("JOIN #channel1\r\n"); 
printStream.flush(); 
printStream.print("JOIN #channel2\r\n"); 
printStream.flush(); 

En outre, vous devez envelopper votre outputStream avec DataOutputStream. Ce wrapper crée une sortie plus portable. Plain OutputStream peut causer des problèmes avec certains types de données primitifs si le serveur et le client ont des architectures informatiques différentes.

1

J'ai trouvé le problème et cela dépend du client. Sur le client, j'ai utilisé -

count = inputStream.read(buffer)) > -1 

Cela signifie que le client attend jusqu'à ce que outputStream du serveur fermé, puis traiter les données entrantes.