1. import java.net.InetSocketAddress;
  2.  
  3. import io.netty.bootstrap.ServerBootstrap;
  4. import io.netty.channel.ChannelFuture;
  5. import io.netty.channel.ChannelInitializer;
  6. import io.netty.channel.ChannelOption;
  7. import io.netty.channel.EventLoopGroup;
  8. import io.netty.channel.nio.NioEventLoopGroup;
  9. import io.netty.channel.socket.SocketChannel;
  10. import io.netty.channel.socket.nio.NioServerSocketChannel;
  11.  
  12. public class TimeServer {
  13.  
  14. public static void main(String[] args) throws Exception{
  15. new TimeServer().bind("192.168.1.102", 8400);
  16. }
  17.  
  18. public void bind(String addr,int port) {
  19. //配置服务端的nio线程组
  20. EventLoopGroup boosGroup=new NioEventLoopGroup();
  21. EventLoopGroup workerGroup=new NioEventLoopGroup();
  22. try {
  23. ServerBootstrap b=new ServerBootstrap();
  24. b.group(boosGroup,workerGroup);
  25. b.channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG,1024)
  26. .childHandler(new ChildChannelHandler());
  27. //绑定端口,同步等待成功
  28. ChannelFuture f=b.bind(new InetSocketAddress(addr, port)).sync();
  29. //等等服务器端监听端口关闭
  30. f.channel().closeFuture().sync();
  31. } catch (Exception e) {
  32. // TODO: handle exception
  33. }finally{
  34. boosGroup.shutdownGracefully();
  35. workerGroup.shutdownGracefully();
  36. }
  37. }
  38.  
  39. private class ChildChannelHandler extends ChannelInitializer<SocketChannel>{
  40.  
  41. @Override
  42. protected void initChannel(SocketChannel ch) throws Exception {
  43. ch.pipeline().addLast(new TimeServerHandler());
  44.  
  45. }
  46.  
  47. }
  48.  
  49. }
  1. import java.nio.ByteBuffer;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4.  
  5. import io.netty.buffer.ByteBuf;
  6. import io.netty.buffer.Unpooled;
  7. import io.netty.channel.ChannelHandlerAdapter;
  8. import io.netty.channel.ChannelHandlerContext;
  9.  
  10. public class TimeServerHandler extends ChannelHandlerAdapter {
  11.  
  12. @Override
  13. public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
  14. ByteBuf buf=(ByteBuf)msg;
  15. byte[] bytes=new byte[buf.readableBytes()];
  16. buf.readBytes(bytes);
  17. String body=new String(bytes,"UTF-8");
  18. SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  19. String time=dateFormat.format(new Date());
  20. String res="来自与服务端的回应,时间:"+ time;
  21. ByteBuf resp=Unpooled.copiedBuffer(res.getBytes());
  22. ctx.write(resp);
  23.  
  24. }
  25.  
  26. @Override
  27. public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
  28. ctx.flush();
  29. }
  30.  
  31. @Override
  32. public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
  33. ctx.close();
  34. }
  35.  
  36. }

这个比传统的nio好用多了,netty的版本为netty-all-5.0.0.Alpha1.jar

天天学习,天天进步

netty 实现socket服务端编写的更多相关文章

  1. 基于netty的socket服务端触发了channelInactive方法,但实际连接没有断开的问题

    背景: 一个中小型H5游戏,后端使用基于 netty 的socket服务 服务端 分为 分发服务器 & 业务服务器,业务服务器可负载 用户客户端与分发服务器连接 分发服务器再作为客户端与每台业 ...

  2. 在python中编写socket服务端模块(二):使用poll或epoll

    在linux上编写socket服务端程序一般可以用select.poll.epoll三种方式,本文主要介绍使用poll和epoll编写socket服务端模块. 使用poll方式的服务器端程序代码: i ...

  3. Netty 搭建 WebSocket 服务端

    一.编码器.解码器 ... ... @Autowired private HttpRequestHandler httpRequestHandler; @Autowired private TextW ...

  4. AutoCAD.net支持后台线程-Socket服务端

    最近因为公司项目的需求,CAD作为服务端在服务器中常驻运行,等待客户端远程发送执行任务的指令,最终确认用Socket-tcp通讯,CAD需要实时监听客户端发送的消息,这时就需要开启线程执行Socket ...

  5. 使用NewLife网络库构建可靠的自动售货机Socket服务端(一)

    最近有个基于tcp socket 协议和设备交互需求,想到了新生命团队的各种组件,所以决定用NewLife网络库作为服务端来完成一系列的信息交互. 第一,首先说一下我们需要实现的功能需求吧 1,首先客 ...

  6. 第一个socket服务端程序

    第一个socket服务端程序 #include <stdio.h> #include <stdlib.h> #include <string.h> #include ...

  7. C# Socket服务端与客户端通信(包含大文件的断点传输)

    步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收 ...

  8. MSDN上的异步socket 服务端例子

    MSDN上的异步socket 服务端例子 2006-11-22 17:12:01|  分类: 代码学习 |  标签: |字号大中小 订阅     Imports SystemImports Syste ...

  9. 利用多线程使socket服务端可以与多个客户端同时通讯

    利用多线程使socket服务端可以与多个客户端同时通讯 server import socket 1. 符合TCP协议的手机 server = socket.socket(socket.AF_INET ...

随机推荐

  1. nginx源码分析

    ngx_init_cycle 解析配置文件 完成模块中command set函数调用

  2. linux的SVN搭建与同步

    以下的配置文件,开头都不能有空格 安装: yum install subversion 验证:svnserve --version 代码库创建:(类似,可以建立多个仓库)[repo]mkdir -p ...

  3. Unity学习笔记(3):获取对象

    在上一篇文章中(Unity映射注册)中概要介绍了Unity中的映射机制,本节主要介绍对象获取,包括默认获取,通过名称获取,获取全部对象,同时通过加载配置文件,然后再获取对象. 通过代码获取对象 方式1 ...

  4. 解决Ajax跨域问题:Origin xx is not allowed by Access-Control-Allow-Origin.

    一:使用jsonp格式, 如jquery中ajax请求参数   dataType:'JSONP'. <html> <head> <title>title</t ...

  5. android 数据存储的四种方式.

    Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File.由于Android系统中,数据基本都是私有的的,都是存放 ...

  6. cxgrid footer summary value by a column

    var AIndex: integer; AValue: variant; begin with cxGrid1DBTableView1.DataController.Summary do begin ...

  7. 2014年辛星完全解读Javascript第六节 对象

    随着面向对象的普及,现在很多语言都在支持面向对象,Javascript也不例外,所谓对象,就是拥有属性和方法的数据.这里的属性其实就是变量,这里的方法,其实就是函数.但是Javascript的面向对象 ...

  8. mybatis显示sql语句 log4j.properties配置文件

    log4j.properties配置如下: 将ibatis log4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语句,方便调试: ### 设置Logger输出级别和输出目的地 # ...

  9. sql with递归

       with temp as ( select Id, UserId, OfficeID, RoleId, DeptId, IsDelete, IsEnd, ParentId from [dbo]. ...

  10. 怎么在SQL Server 2008中还原.mdf数据文件

    还原数据库文件的过程中,只有mdf文件,该怎么还原?在原来的SQL Server 2005中直接点击数据库然后附加就可以还原,但是在2008 版本中附加数据库文件则会出错(只有mdf文件){执行Tra ...