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 "未认证";
}
}
}