栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

netty、javafx-启动服务端,随时监听是否有消息过来

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

netty、javafx-启动服务端,随时监听是否有消息过来

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    scanHandler=new ScanNettyServerHandler();
                    new scanNettyServer(10001,scanHandler).run();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                System.out.println("启动scanNettyServer成功,端口1001");
            }
        }).start();

        final String[] juegeMark = {""};
        new Timer(false).schedule(new TimerTask() {
            @Override
            public void run() {
                if((!"未认证".equals(scanHandler.getNettyMsg()))){
                    if(!"getMonkey".equals(scanHandler.getNettyMsg())){

                        if("".equals(juegeMark[0]) || (!juegeMark[0].equals(scanHandler.getNettyMsg()))){
                            String msg=scanHandler.getNettyMsg();
                            Platform.runLater(new Runnable() {
                                @Override
                                public void run() {
                                    search.setText(msg.trim());
                                    doSearchAction(null);
                                    juegeMark[0] =msg;
                                }
                            });
                        }
                    }
                }
            }
        },10000,1000);

serverhandler代码

package sample.netty;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.CharsetUtil;

import java.io.IOException;

public class ScanNettyServerHandler extends ChannelInboundHandlerAdapter { // (1)

    Boolean validStr = false;
    String acceptedMsg = "";

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) { // (2)
        ByteBuf byteBuf = (ByteBuf) msg;
        System.out.println("客户端发来的消息:" + byteBuf.toString(CharsetUtil.UTF_8));
        acceptedMsg = byteBuf.toString(CharsetUtil.UTF_8);
        if (byteBuf.toString(CharsetUtil.UTF_8).equals("getMonkey")) {
            validStr = true;
            System.out.println("客户端认证成功");
        }
    }

    //数据读取完毕事件
    public void channelReadComplete(ChannelHandlerContext ctx) throws IOException, InterruptedException {
        //数据读取完毕,将信息包装成一个Buffer传递给下一个Handler,Unpooled.copiedBuffer会返回一个Buffer
        //调用的是事件处理器的上下文对象的writeAndFlush方法
        //意思就是说将  你好  传递给了下一个handler
//            ctx.writeAndFlush(Unpooled.copiedBuffer("你好,服务端已经读取消息完成!", CharsetUtil.UTF_8));
        if (validStr) {
            ctx.writeAndFlush(Unpooled.copiedBuffer("你好,服务端已经读取消息完成!", CharsetUtil.UTF_8));
        } else {
            ctx.writeAndFlush(Unpooled.copiedBuffer("客户端未认证", CharsetUtil.UTF_8));
        }
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { // (4)
        // Close the connection when an exception is raised.
        cause.printStackTrace();
        ctx.close();
    }

    public String getNettyMsg() {
        if (validStr) {
            return acceptedMsg;
        } else {
            return "未认证";
        }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/846173.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号