1. package com.ming.netty.nio;
  2. 2
  3. 3 import io.netty.bootstrap.Bootstrap;
  4. 4 import io.netty.channel.ChannelFuture;
  5. 5 import io.netty.channel.ChannelInitializer;
  6. 6 import io.netty.channel.ChannelOption;
  7. 7 import io.netty.channel.EventLoopGroup;
  8. 8 import io.netty.channel.nio.NioEventLoopGroup;
  9. 9 import io.netty.channel.socket.SocketChannel;
  10. 10 import io.netty.channel.socket.nio.NioSocketChannel;
  11. 11
  12. 12 /**
  13. 13 * netty 客户端模拟
  14. 14 * @author mingge
  15. 15 *
  16. 16 */
  17. 17 public class TimeClient {
  18. 18
  19. 19
  20. 20 public static void main(String[] args) throws Exception{
  21. 21 new TimeClient().connect("127.0.0.1", 8400);
  22. 22 }
  23. 23
  24. 24 public void connect(String addr,int port) throws Exception{
  25. 25 EventLoopGroup group=new NioEventLoopGroup();
  26. 26 try {
  27. 27 Bootstrap b=new Bootstrap();
  28. 28 b.group(group).channel(NioSocketChannel.class)
  29. 29 .option(ChannelOption.TCP_NODELAY, true)
  30. 30 .handler(new ChannelInitializer<SocketChannel>() {
  31. 31 public void initChannel(SocketChannel ch) throws Exception{
  32. 32 ch.pipeline().addLast(new TimeClientHandler());
  33. 33 }
  34. 34 });
  35. 35 ChannelFuture f=b.connect(addr,port);
  36. 36 f.channel().closeFuture().sync();//等待客户端关闭连接
  37. 37 } catch (Exception e) {
  38. 38 // TODO: handle exception
  39. 39 }finally{
  40. 40 group.shutdownGracefully();
  41. 41 }
  42. 42 }
  43. 43 }
  1. 1 package com.ming.netty.nio;
  2. 2
  3. 3 import io.netty.buffer.ByteBuf;
  4. 4 import io.netty.buffer.Unpooled;
  5. 5 import io.netty.channel.ChannelHandlerAdapter;
  6. 6 import io.netty.channel.ChannelHandlerContext;
  7. 7
  8. 8 public class TimeClientHandler extends ChannelHandlerAdapter {
  9. 9
  10. 10 private final ByteBuf byteMsg;
  11. 11
  12. 12 public TimeClientHandler() {
  13. 13 byte[] req="我是请求数据哦".getBytes();
  14. 14 byteMsg=Unpooled.buffer(req.length);
  15. 15 byteMsg.writeBytes(req);
  16. 16 }
  17. 17
  18. 18 @Override
  19. 19 public void channelActive(ChannelHandlerContext ctx) throws Exception {
  20. 20 ctx.writeAndFlush(byteMsg);
  21. 21 }
  22. 22
  23. 23 @Override
  24. 24 public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
  25. 25 ByteBuf buf=(ByteBuf)msg;
  26. 26 byte[] req=new byte[buf.readableBytes()];
  27. 27 buf.readBytes(req);
  28. 28 String body=new String(req,"GBK");
  29. 29 System.out.println("body:"+body);
  30. 30 }
  31. 31
  32. 32 @Override
  33. 33 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
  34. 34 //释放资源
  35. 35 ctx.close();
  36. 36 }
  37. 37
  38. 38
  39. 39 }

netty socket 客服端编程的更多相关文章

  1. python socket 客服端服务端编程

    客服端编程 import socket try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error a ...

  2. Python网络编程UDP服务器与客服端简单例子

    [转载] https://blog.csdn.net/hu330459076/article/details/7868028 UDP服务器代码: #!/usr/bin/env python # -*- ...

  3. 编程模仿MySql客服端

    写在前面 通过自己编写的Java代码程序,去模仿实现MySql客服端的简单功能,最终以控制台操作,很像在Dos窗口通过命令操作MySql数据库. 关键问题 在编写过程中遇到的一些小问题和一些值得留心注 ...

  4. android客服端+eps8266+单片机+路由器之远程控制系统

    用android客服端+eps8266+单片机+路由器做了一个远程控制的系统,因为自己是在实验室里,所以把实验室的门,灯做成了远程控制的. 控制距离有多远------只能说很远很远,只要你手机能上网的 ...

  5. TCP服务器端和客服端(一)

    就是一个客服端(Socket)和服务器(ServerSocket)端的链接间.我的理解是一个服务端可以链接多个客服端. 在客服端有输入流outPutStream. 用于发送数据 在服务器端有输出流.i ...

  6. Live555 分析(三):客服端

    live555的客服端流程:建立任务计划对象--建立环境对象--处理用户输入的参数(RTSP地址)--创建RTSPClient实例--发出DESCRIBE--发出SETUP--发出PLAY--进入Lo ...

  7. python服务器端、客户端的模型,客服端发送请求,服务端进行响应(web.py)

    服务器端.客户端的模型,客服端发送的请求,服务端的响应 相当于启动了一个web server install web.py 接口框架用到的包 http://webpy.org/tutorial3.zh ...

  8. 利用java在服务器和客服端建立连接,进行通讯(代码实例)

    客服端代码:有注释 package javanet; import java.io.IOException; import java.io.InputStream; import java.io.Ou ...

  9. 客服端JavaScript线程模型

    JavaScript语言核心并不包含任何线程机制,并且客服端JavaScript传统上没有定义任何线程机制.HTML5定义了一种作为后台线程的“WebWorker",但是客服端JavaScr ...

随机推荐

  1. Stem函数绘图

    stem(n,x,'filled');第三个参数是绘图的样式,filled就是填充,将圆圈填充. Stem函数绘图各种不同的绘图函数分别适用于不同的场合,使用“stem”绘制针状图最简单,从附录中提供 ...

  2. 【瞎想】TDD与汉字;FDD与英语字母

    我觉得TDD与汉字;FDD与英语字母他们之间有相似性. FDD的上行和下行用频率的不同来区分,TDD的上行和下行用相同的频率然后在同一时刻相差半个波长(对称频率).如果用维度数描述,FDD是1维的话, ...

  3. Nginx配置文件详细说明

    在此记录下Nginx服务器nginx.conf的配置文件说明, 部分注释收集与网络. #运行用户user www-data;    #启动进程,通常设置成和cpu的数量相等worker_process ...

  4. Android 二维码 生成和识别(转)

    原博客地址 :http://www.cnblogs.com/weixing/archive/2013/08/28/3287120.html 还有几个写的也可以参考一下:http://www.itnos ...

  5. 【BZOJ 4598】【SDOI 2016 Round2 Day1 T3】模式字符串

    2016-05-21因为BZOJ上“ 数据文件太过巨大,仅提供前三组数据测试.”所以我考场上写的60分的点分治交上去也A了. 我的这个点分治的时间复杂度是$O(Tnmlogn)$的,听题解时没听懂$O ...

  6. 【BZOJ 2157】旅游

    再水一道模板题,明天就要出发去参加二轮省选了赶紧复习复习模板. 链剖模板题,可是写链剖太麻烦了,还是写lct吧. 但这个lct比较麻烦了,因为边权有正有负,要统计最大值和最小值,这样点权赋为什么值都会 ...

  7. git初体验(六)git配置

    一.基本配置 看这篇Git 基本配置其实就解决很多问题了. 二.客户端配置 1.git bash 粘贴与编辑 在git bash客户端头部右键,现在属性,然后把"快速编辑模式勾选即可&quo ...

  8. OneThink学习笔记01

    OneThink1.0开发手册: http://document.onethink.cn/manual_1_0.html 简介  OneThink是一个开源的内容管理框架,基于最新的ThinkPHP3 ...

  9. 算法与数据结构之选择排序(C语言)

    #include<stdio.h> #include<stdlib.h> void SelectSort(int *a,int n);//预声明要调用的函数 int main( ...

  10. Cell右滑的动作状态

    //允许cell可以进行编辑 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)index ...