Comment puis-je envoyer des données sous forme binaire sur un socket Java?
J'ai vu beaucoup d'exemples de l'envoi de données sérialisées sur les sockets en Java, mais tout ce que je veux est d'envoyer de simples entiers et d'une chaîne. Et, le problème est que je suis en train de les communiquer à un binaire écrit en C.
Ainsi, la ligne de fond: comment puis-je envoyer des octets sur un socket en Java?
- Êtes-vous sûr que le programme C et le programme Java traiter binaire des entiers et des chaînes de la même façon? Si vous ne l'êtes pas, les envoyer sous forme de texte. Si vous n'avez pas le contrôle de la C programme de lecture du socket, alors vous n'aurez aucun choix mais pour envoyer les données dans le format que c'est le programme C veut.
Vous devez vous connecter pour publier un commentaire.
Je voudrais vraiment vous recommandons de ne pas utiliser la bibliothèque de Sockets Java directement. J'ai trouvé Netty (à partir de JBoss) pour être vraiment facile à mettre en œuvre et très puissant. Le Netty ChannelBuffer de la classe est livré avec une foule d'options pour l'écriture de différents types de données et bien évidemment pour pouvez écrire votre propre codeurs et décodeurs pour écrire Pojo le sens du courant, si vous le souhaitez.
Cette page est une très bonne base de départ - j'ai été en mesure de faire une assez sophistiqué client/serveur avec la coutume des encodeurs et des décodeurs en moins de 30 minutes à la lecture de ceci: http://docs.jboss.org/netty/3.2/guide/html/start.html.
Si vous voulez vraiment utiliser les sockets Java. La prise de sortie courant peut être enveloppé dans un DataOutputStream qui vous permet d'écrire beaucoup de différents types de données, par exemple:
J'espère que c'est utile.
Vous pouvez utiliser une simple OutputStream donné par le Socket.
De là, vous pouvez écrire octets.
Si vous le souhaitez, vous pouvez également encapsuler le flux dans un BufferedOutputStream d'avoir un tampon.
Je recommande à la recherche dans Protocol Buffers pour la sérialisation et ZeroMQ pour le transfert de données.