SimpleChannelHandlerテキストレベルの通信を確立
3179 ワード
初心者はnettyでテキストレベルの通信に適しており、誤り訂正が簡単で、デバッグ速度が速い.
SimpleChannelHandlerから継承され、このスタートは比較的容易です.
channelConnectedは連続的な挨拶をしなければならないわけではありません.
handleUpstreamとhandleDownstreamは現在、変化を記録しているだけで、具体的な詳細をよりよく見ることができ、実際にはしていません.
MessageReceivedは,情報処理を受信して返す主関数であり,現在はechoを加えて返すだけである.
もう一つサーバーを起動すればいいです.注意pipelineに付けられているものは、frameDecoderは改行文字で処理され、行為単位で処理されます.stringDecoderとstringEncoderは,いずれも伝送内容を文字列として扱う.
bootstrap.bindはポートを傍受するために使用されます.
クライアント送信の際に加算することに注意してください.サービス側にframeDecoderを付けて改行で終わるので、付けないのは未終了とみなされます.
public class ServerHandler extends SimpleChannelHandler {
SimpleChannelHandlerから継承され、このスタートは比較的容易です.
public void channelConnected(
ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
// Send greeting for a new connection.
e.getChannel().write("welcome
");
}
public void handleUpstream(ChannelHandlerContext ctx, ChannelEvent e) throws Exception {
// Log all channel state changes.
if (e instanceof ChannelStateEvent) {
logger.debug("Channel state changed: " + e);
}
super.handleUpstream(ctx, e);
}
public void handleDownstream(ChannelHandlerContext ctx, ChannelEvent e) throws Exception {
// Log all channel state changes.
if (e instanceof MessageEvent) {
logger.debug("Writing:: " + e);
}
super.handleDownstream(ctx, e);
}
channelConnectedは連続的な挨拶をしなければならないわけではありません.
handleUpstreamとhandleDownstreamは現在、変化を記録しているだけで、具体的な詳細をよりよく見ることができ、実際にはしていません.
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
// Send back the received message to the remote peer.
Object msg = e.getMessage();
logger.debug("e.getMessage():"+msg+" class:"+msg.getClass());
e.getChannel().write("echo:"+msg);
e.getChannel().close();
}
MessageReceivedは,情報処理を受信して返す主関数であり,現在はechoを加えて返すだけである.
public class Server {
private static final int SERVER_PORT = 10000;
public static void main(String[] args) throws Exception {
// Configure the server.
ServerBootstrap bootstrap = new ServerBootstrap(
new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));
// Set up the default event pipeline.
ServerHandler handler = new ServerHandler();
ChannelPipeline pipeline = bootstrap.getPipeline();
pipeline.addLast("frameDecoder", new DelimiterBasedFrameDecoder(8192,Delimiters.lineDelimiter()));
pipeline.addLast("stringDecoder", new StringDecoder("UTF-8"));
pipeline.addLast("stringEncoder", new StringEncoder("UTF-8"));
pipeline.addLast("handler", handler);
// Bind and start to accept incoming connections.
bootstrap.bind(new InetSocketAddress(SERVER_PORT));
}
}
もう一つサーバーを起動すればいいです.注意pipelineに付けられているものは、frameDecoderは改行文字で処理され、行為単位で処理されます.stringDecoderとstringEncoderは,いずれも伝送内容を文字列として扱う.
bootstrap.bindはポートを傍受するために使用されます.
クライアント送信の際に加算することに注意してください.サービス側にframeDecoderを付けて改行で終わるので、付けないのは未終了とみなされます.