Envoyer une chaîne au lieu de byte via le socket en Java
Comment puis-je envoyer un strin utilisant la méthode getOutputStream. Il ne peut envoyer des octets comme ils ont mentionné. Jusqu'à présent, je peux envoyer un octet. mais pas une chaîne de valeur.
public void sendToPort() throws IOException {
Socket socket = null;
try {
socket = new Socket("ip address", 4014);
socket.getOutputStream().write(2); //have to insert the string
} catch (UnknownHostException e) {
System.err.print(e);
} finally {
socket.close();
}
}
Merci d'avance
source d'informationauteur Ravindu
Vous devez vous connecter pour publier un commentaire.
Comment sur l'utilisation de PrintWriter:
MODIFIER: Trouvé ma réponse et ont vu une amélioration a été discuté, mais laissé de côté. Ici, c'est une meilleure façon pour écrire des chaînes à l'aide de OutputStreamWriter:
Utilisation OutputStreamWriter classe pour obtenir ce que vous voulez
Deux options:
OutputStream
dans unOutputStreamWriter
de sorte que vous pouvez ensuite envoyer la chaîneString.getBytes(encodage)
Noter que dans les deux cas, vous devez spécifier l'encodage explicite, par exemple "UTF-8" - qui évite juste à l'aide de la plate-forme de codage par défaut (ce qui est presque toujours une mauvaise idée).
Ce sera juste envoyer les données de caractère lui-même - si vous devez envoyer plusieurs chaînes de caractères, et l'autre extrémité a besoin de savoir où chacun commence et se termine, vous aurez besoin d'un plus compliqué protocole. Si c'est Java sur les deux extrémités, vous pouvez utiliser
DataInputStream
etDataOutputStream
; sinon vous pouvez venir avec votre propre protocole (en supposant qu'il n'est pas déjà fixé).si vous avez une simple chaîne de caractères que vous pouvez faire
Vous pouvez utiliser
OutputStreamWriter
comme ceci:Vous pouvez spécifier le jeu de caractères, tels que
"UTF-8"
"UTF-16"
......Ou
PrintStream
:Ou
DataOutputStream
:Ou vous pouvez trouver plus de
Writer
s etOutputStream
s dansLa java.io paquet
REMARQUE: Vous aurez besoin d'utiliser DataInputStream readUTF() la méthode à partir de la réception de côté.
NOTE: vous devez vérifier la valeur null dans le "enfin" caluse; sinon, vous allez courir dans NullPointerException plus tard.
Je vois un tas de très des solutions valables dans ce post. Mon préféré, c'est à l'aide d'Apache Commons faire l'opération d'écriture:
IOUtils.écrire(CharSequence, OutputStream, Charset)
essentiellement faire par exemple:
IOUtils.write("Your String", socket.getOutputStream(), "UTF-8")
et attraper les exceptions appropriées. Si vous essayez de construire un certain type de protocole que vous pouvez regarder dans les Apache commons-net-library pour quelques conseils.
Vous ne pouvez jamais vous tromper avec ce. Et il y a beaucoup d'autres méthodes utiles et les classes de Apache commons-io qui vous fera gagner du temps.
Anciens posts, mais je peux voir le même défaut dans la plupart des postes. Avant la fermeture de la socket, vider le flux. Comme dans @Josnidhin réponse: