J'essaie de communiquer avec un serveur qui utilise DataInputStream.readUTF et DataOutputStream.writeUTF.Comment lire/écrire avec netty quand l'autre côté utilise readUTF/writeUTF?
j'ai fait le code habituel bootstrapping pour configurer mon client, et définir la pipelinefactory suivante
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
@Override
public ChannelPipeline getPipeline() throws Exception {
return Channels.pipeline(
new LengthFieldBasedFrameDecoder(65536, 0, 2),
new StringDecoder(CharsetUtil.UTF_8),
new StringEncoder(CharsetUtil.UTF_8),
new MyClientHandler());
}
});
dans MyClientHandler qui s'étend SimpleChannelUpstreamHandler, je donne les résultats suivants:
boolean sent = false; //is this thread safe?
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
logger.log(Level.INFO, e.getMessage().toString());
e.getChannel().write("Hello over there!");
if(!sent){
//do something and set sent
}
}
J'ai réussi à recevoir des messages du serveur avec succès, mais le serveur ne reçoit pas mon message "bonjour là-bas". Je ne sais pas ce que j'ai pu ignorer.
En outre, notez le booléen envoyé, puis-je ajouter de tels champs et travailler avec eux sans problèmes de threading?
Je pense qu'une approche encore plus propre serait d'ajouter org.jboss.netty.handler.codec.frame.LengthFieldPrepender au pipeline du serveur. Cela ajoutera automatiquement le champ lengthField au paquet sortant. – Abe