2016-12-24 1 views
1

Ich habe ein Problem beim Senden von Paketen bei der Kanalregistrierung (Client -> Server) festgestellt. Um weiter zu testen, wenn ich das Paket nach der Registrierung sende, darf ich das Paket senden. Der umgekehrte Weg (Server -> Client) funktioniert einwandfrei. Registrierungsfunktion:Netty - kann bei der Registrierung nicht in den Kanal schreiben (Ereignis channelRegistered)

@Override 
public void channelRegistered(ChannelHandlerContext ctx) throws Exception { 
    ctx.channel().write(new byte[] {0x00}); 
} 

Es trifft auch einen Encoder auf die Filterkette:

public class Encoder extends MessageToByteEncoder<byte[]>{ 

@Override 
protected void encode(ChannelHandlerContext ctx, byte[] b, ByteBuf bb) throws Exception { 
    byte[] data = b.getData(); 

    bb.writeInt(data.length); 
    bb.writeBytes(data); 
} 
} 

Der Server bietet deshalb nicht das oben genannte Paket erhält - als Ergebnis ich gedebuggt wenn channelRead Ereignis sehen gefeuert und es tat es nicht. (Weder hat meine Dekodierklasse die Daten zu decodieren)

Irgendwelche Annahmen?

Antwort

1

channelRegistered wird aufgerufen, wenn der Kanal für seinen EventLoop registriert ist. Das bedeutet nicht, dass es bereit ist, Daten zu senden, der Kanal hat noch nicht einmal einen Socket geöffnet. Sie möchten channelActive, die aufgerufen wird, wenn der Kanal aktiv ist, d. H. Bereit zum Senden und Empfangen von Daten.

+0

Ich sehe, ich denke, ich hätte nicht gejagt und lesen Sie die API-Beschreibung, danke für die Aufklärung mich :) – user3385390

Verwandte Themen