当前位置: 首页 > news >正文

网站建设公司ttmwl首都航空公司官方网站

网站建设公司ttmwl,首都航空公司官方网站,建设网站的准备工作分为,ppt模板免费下载 素材熊猫办公1设计思路#xff1a;启动一个服务端#xff0c;多个客户端第一个客户端启动时#xff0c;会告诉服务器上线了第二个客户端启动时#xff0c;告诉服务器上线#xff0c;并且通知第一个启动的客户端第三个客户端启动时#xff0c;告诉服务器上线#xff0c;并且通知第一个…1设计思路启动一个服务端多个客户端第一个客户端启动时会告诉服务器上线了第二个客户端启动时告诉服务器上线并且通知第一个启动的客户端第三个客户端启动时告诉服务器上线并且通知第一个和第二个启动的客户端其中一个客户端离开时通知其它客户单端和服务端2 代码服务端import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.ChannelPipeline; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.codec.string.StringDecoder; import io.netty.handler.codec.string.StringEncoder;/*** Author: liubujun* Date: 2023/2/15 10:31*/public class GroupChatServer {//监听端口private int port;public GroupChatServer(int port){this.port port;}//编写run方法处理客户端请求public void run() throws Exception{NioEventLoopGroup bossGroup new NioEventLoopGroup();NioEventLoopGroup workGroup new NioEventLoopGroup();try {ServerBootstrap b new ServerBootstrap();b.group(bossGroup,workGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG,128).childOption(ChannelOption.SO_KEEPALIVE,true).childHandler(new ChannelInitializerSocketChannel() {Overrideprotected void initChannel(SocketChannel ch) throws Exception {//获取到pipelineChannelPipeline pipeline ch.pipeline();//向pipeline加入解码器pipeline.addLast(decoder,new StringDecoder());//向pipeline加入编码器pipeline.addLast(encoder,new StringEncoder());//加入自己的业务处理handlepipeline.addLast(new GroupChatServerHandle());}});System.out.println(netty 服务器启动);ChannelFuture channelFuture b.bind(port).sync();//监听关闭channelFuture.channel().closeFuture().sync();}finally {bossGroup.shutdownGracefully();workGroup.shutdownGracefully();}}public static void main(String[] args) throws Exception {new GroupChatServer(7000).run();} }服务端处理器import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.DefaultChannelProgressivePromise; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.channel.group.ChannelGroup; import io.netty.channel.group.DefaultChannelGroup; import io.netty.util.concurrent.GlobalEventExecutor; import jdk.nashorn.internal.runtime.GlobalConstants;import java.text.SimpleDateFormat; import java.util.Date;/*** Author: liubujun* Date: 2023/2/15 14:49*/public class GroupChatServerHandle extends SimpleChannelInboundHandlerString {//定义一个channel组管理所有的channel//GlobalEventExecutor.INSTANCE 是全局事件的执行器是一个单例private static ChannelGroup channelGroup new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);SimpleDateFormat sf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);//handlerAdded表示连接建立一旦连接表示第一个被执行//将当前channel加入到channelGroupOverridepublic void handlerAdded(ChannelHandlerContext ctx) throws Exception {Channel channel ctx.channel();//将该客户加入的聊天信息推送给其他在线的客户端/*** 该方法会将channelGroup中所有的channel遍历并发送消息*/channelGroup.writeAndFlush([客户端]channel.remoteAddress()加入聊天sf.format(new Date())\n);channelGroup.add(channel);}//断开连接将xx客户离开信息推送给其他在线的客户端Overridepublic void handlerRemoved(ChannelHandlerContext ctx) throws Exception {Channel channel ctx.channel();channelGroup.writeAndFlush([客户端]channel.remoteAddress()离开了);System.out.println(channelGroup sizechannelGroup.size());}//表示channel处于活动状态提示xxx上线Overridepublic void channelActive(ChannelHandlerContext ctx) throws Exception {System.out.println(ctx.channel().remoteAddress()上线了~);}//表示channel处于非活动状态提示xxx离线Overridepublic void channelInactive(ChannelHandlerContext ctx) throws Exception {System.out.println(ctx.channel().remoteAddress()离线了~);}Overrideprotected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {//获取到当前的channelChannel channel ctx.channel();//这时我们遍历channelGroup,根据不同的情况回送不同的消息channelGroup.forEach(ch-{if (channel ! ch ){ //不是当前的channel转发消息ch.writeAndFlush([客户]channel.remoteAddress()发送了消息msg \n);}else {ch.writeAndFlush([自己]发送了消息msg\n);}});}Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {ctx.close();} }客户端代码:import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.ChannelPipeline; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.codec.string.StringDecoder; import io.netty.handler.codec.string.StringEncoder;/*** Author: liubujun* Date: 2023/2/15 10:31*/public class GroupChatServer {//监听端口private int port;public GroupChatServer(int port){this.port port;}//编写run方法处理客户端请求public void run() throws Exception{NioEventLoopGroup bossGroup new NioEventLoopGroup();NioEventLoopGroup workGroup new NioEventLoopGroup();try {ServerBootstrap b new ServerBootstrap();b.group(bossGroup,workGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG,128).childOption(ChannelOption.SO_KEEPALIVE,true).childHandler(new ChannelInitializerSocketChannel() {Overrideprotected void initChannel(SocketChannel ch) throws Exception {//获取到pipelineChannelPipeline pipeline ch.pipeline();//向pipeline加入解码器pipeline.addLast(decoder,new StringDecoder());//向pipeline加入编码器pipeline.addLast(encoder,new StringEncoder());//加入自己的业务处理handlepipeline.addLast(new GroupChatServerHandle());}});System.out.println(netty 服务器启动);ChannelFuture channelFuture b.bind(port).sync();//监听关闭channelFuture.channel().closeFuture().sync();}finally {bossGroup.shutdownGracefully();workGroup.shutdownGracefully();}}public static void main(String[] args) throws Exception {new GroupChatServer(7000).run();} }客户端处理器import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler;/*** Author: liubujun* Date: 2023/2/15 16:51*/public class GroupChatClientHandle extends SimpleChannelInboundHandlerString {Overrideprotected void channelRead0(ChannelHandlerContext channelHandlerContext, String msg) throws Exception {System.out.println(msg.trim());} } 演示先启动服务端启动第一个客户端服务端和客服端控制台输出如下启动第二个客户端服务端、客服端1、客户端2控制台输出如下启动第三个客户端服务端控制台输出如下客户端1、客户端2、客户端3输出如下关闭其中一个客户端我这边关闭的是第二个服务端输出如下三个客户端打印台输出如下看到结果发现符合当初的设计。注意打开多个客户端需要在idea中配置
http://www.hkea.cn/news/14402834/

相关文章:

  • 做企业官网需要做什么湖州站内优化seo公司
  • 广州企业网站建设价格网站建设 设计
  • 自助服务器网站建设求助用cms做网站设计_以我的家乡家乡为主题
  • 怎样做才能发布你的网站常德网红
  • 网站免费优化软件wordpress主题php7
  • 南昌所有建设工程网站制作旅游网站简单
  • 如何用wordpress制作网站杭州移动网站建设
  • 阿里云有网站建设吗成都网站建设推广可以
  • 百度站长工具添加网站验证青海互动网站建设
  • 本地唐山网站建设零基础学it从哪方面学起
  • 网站备案账号是什么样的网络服务提供者知道或者应当知道
  • Wordpress做什么网站赚钱网站建设后期出现的问题
  • 下载 iis 网站建程网app下载一体板
  • 美观网站建设物美价廉网站设计不同的原因
  • 郑州高端定制建设网站宜昌做网站公司有哪些方法
  • 自己做一个购物网站saas建站
  • 网站建设学什么一个做网站的软件
  • 网页设计师常逛网站前端开发招聘要求
  • 网站遭受攻击大连谷歌seo
  • 做的好微信商城网站重庆旅游攻略必去景点推荐
  • 专做实习生招聘的网站做网站的基本知识
  • 做网站软文怎么弄百度怎么优化关键词排名
  • 广州网站建设企业久久建筑网高空坠落专项应急预案
  • 12数据网站建设做外文网站
  • 河南网站建设网站建设的客户
  • 网站开发代理商成都建设网站公司简介
  • 云主机多个网站wordpress 首字母标签页
  • 智慧团建登录官网惠州百度关键词优化
  • 360建站官网wordpress静态化链接
  • 网站选择城市怎么做商品定制首页