今天开始写服务器了

由于我根本不会写服务器  前两天搞什么tomcat累了半死 没搞出来。 最终决定使用mina框架  实在是太简单这个框架

直接上图  mina逻辑尽在此图

简单介绍下  mina就是socket连接的拓展版 :(懂socket自动跳过此段)

socket是什么?   解释起来比较麻烦  简单说一下socket就是tcp ,udp上一层    所有的网络连接都是一个socket连接   在此链接里传输byte数据    那怎么让人懂你数据是个什么鬼    于是就有了协议  比如http协议。   这个协议把你接收到的数据解析成你看的懂得东西。所以你完全可以自定义协议   就有了我们现在需要rtp协议了   具体自己去查资料

继续mina

首先我们用eclipse  创建一个“java工程”  打开eclipse左上角 file ->  new  -> other  ->  java Project

就创建了一个java  工程   接下来找到src  右键创建个包  再创建一个class

然后你要导入4个库

右键项目名Build  Path-> configure  Build Path

Add  External JARs..     添加你下载的库

然后我们上代码 (我不知道哪里)

public class MinaTimeServer {// 服务器监听端口    private static final int PORT = 8033;    public MinaTimeServer() {    // TODO Auto-generated constructor stub    }    public static void main(String[] args) {    // 服务器端的主要对象    IoAcceptor acceptor = new NioSocketAcceptor();    // 设置Filter链     acceptor.getFilterChain().addLast("logger", new LoggingFilter());    // 协议解析,采用mina现成的UTF-8字符串处理方式    acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));    // 设置消息处理类(创建、关闭Session,可读可写等等,继承自接口IoHandler)    acceptor.setHandler(new TimeServerHandler() );    // 设置接收缓存区大小    acceptor.getSessionConfig().setReadBufferSize(2048);    acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);  //读写通道无任何操作就进入空闲状态  try {    // 服务器开始监听    acceptor.bind( new InetSocketAddress(PORT) );    }catch(Exception e){    e.printStackTrace();    }    }
}
public class TimeServerHandler extends IoHandlerAdapter {@Overridepublic void exceptionCaught(IoSession session, Throwable cause) throws Exception {cause.printStackTrace();}/** 这个方法是目前这个类里最主要的, 当接收到消息,只要不是quit,就把服务器当前的时间返回给客户端 如果是quit,则关闭客户端连接*/@Overridepublic void messageReceived(IoSession session, Object message) throws Exception {String str = message.toString();if (str.trim().equalsIgnoreCase("quit")) {session.close();return;}Date date = new Date();System.out.println("hello" + str + session.getRemoteAddress() + date.toString());session.write("iamrecived");System.out.println("Message written...");}@Overridepublic void sessionClosed(IoSession session) throws Exception {// TODO Auto-generated method stubsuper.sessionClosed(session);System.out.println("客户端与服务端断开连接.....");}}

ok了 直接点击run  就可以了  服务器自动跑起来  在监听别人访问他   (你有可能遇到端口被占用问题  换一下端口号就好了)

服务器搞定接下来试试  客户端

同上面的流程  建一个java Project  在导入相同jar  然后直接上代码

public class MinaClient {       public static void main(String []args)throws Exception{       //Create TCP/IP connection       NioSocketConnector connector = new NioSocketConnector();       //创建接受数据的过滤器       DefaultIoFilterChainBuilder chain = connector.getFilterChain();       //设定这个过滤器将一行一行(/r/n)的读取数据       chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));       //客户端的消息处理器:一个SamplMinaServerHander对象       connector.setHandler(new MinaClientHandler());       //set connect timeout       connector.setConnectTimeout(5000);       //连接到服务器:       ConnectFuture cf = connector.connect(new InetSocketAddress("localhost",8033));       //        Wait for the connection attempt to be finished.       cf.awaitUninterruptibly();       cf.getSession().getCloseFuture().awaitUninterruptibly();       connector.dispose();       }
}    
public class MinaClientHandler extends IoHandlerAdapter {    // 当客户端连接进入时    @Override    public void sessionOpened(IoSession session) throws Exception {    System.out.println("incomming 客户端: " + session.getRemoteAddress());    session.write("i am coming");    }    @Override    public void exceptionCaught(IoSession session, Throwable cause)    throws Exception {    System.out.println("客户端发送信息异常....");    }    // 当客户端发送消息到达时    @Override    public void messageReceived(IoSession session, Object message)    throws Exception {    System.out.println("服务器返回的数据:" + message.toString());    }    @Override    public void sessionClosed(IoSession session) throws Exception {    System.out.println("客户端与服务端断开连接.....");    }    @Override    public void sessionCreated(IoSession session) throws Exception {    // TODO Auto-generated method stub    System.out    .println("one Client Connection" + session.getRemoteAddress());    session.write("我来了······");    }    }    

ok了

先运行服务器   在运行客户端   就可以看到控制台的log了  随便研究下就知道大致什么鬼了

ConnectFuture cf = connector.connect(new InetSocketAddress("localhost",8033)); 

这个localhost  就是本机  你可以替换成ip地址

看一下最开始的图  就是创建一个实例   设置一串filter (筛选协议的 )  然后处理后的值传给handler

大致就是这个意思

服务器建立好了

下一章我们讲rtp  协议传输解析

Android从0开始写直播 基础篇 第4章相关推荐

  1. 【QT开发笔记-基础篇】| 第二章 常用控件 | 2.12 表格控件 QTableWidget

    本节对应的视频讲解:B_站_链_接 QTableWidget 是 Qt 中的表格控件,可以行列的形式来展示数据 1. 属性和方法 QTableWidget 有很多属性和方法,完整的可查看帮助文档. 在 ...

  2. MySQL基础篇——第11章 DML(数据操作):增删改

    MySQL基础篇--第11章 DML(数据操作):增删改 1. 插入数据(增) INSERT INTO ... 使用 INSERT INTO 语句向表中插入数据(记录) 1.1 方式1:VALUES ...

  3. python从零到一之基础篇 第 四 章 流程控制语句

    python基础篇学习 第一章 第二章(上) 第二章(下) 第三章 今天开始学习第四章

  4. 深入探索 Android 网络优化(二、网络优化基础篇)上

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 思维大图大纲 一.为什么要进行网络优化? 等待网络是我们 App 最大的性能瓶颈,再怎么优化 ...

  5. 小老弟!听说你在搞Android 10.0 适配,看这篇就妥了!

    点击上方"何俊林",马上关注,每天早上8:50准时推送 真爱,请置顶或星标 转载自公众号:刘望舒,作者: 吃猫猫的鱼 地址:https://juejin.im/post/5cad5 ...

  6. 深入探索 Android 网络优化(二、网络优化基础篇)下

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 思维大图大纲 八.移动网络 用 2G 看 txt,用 3G 看 jpg,用 4G 看 avi ...

  7. 鸟哥的Linux私房菜(基础篇)- 第六章、Linux 的文件权限与目录配置

    第六章.Linux的文件权限与目录配置 最近更新日期:2009/08/18 Linux最优秀的地方之一,就在于他的多人多任务环境.而为了让各个使用者具有较保密的文件数据,因此文件的权限管理就变的很重要 ...

  8. 鸟哥的Linux私房菜(基础篇)- 第二十一章、系统配置工具(网络与打印机)与硬件侦测

    第二十一章.系统配置工具(网络与打印机)与硬件侦测 最近升级日期:2009/09/15 除了手动配置之外,其实系统提供了一个名为 setup 的命令给系统管理员使用喔!这个命令还能够配置网络呢.此外, ...

  9. 大数据基础篇~JavaSE第一章

    大数据基础篇教程分享01 目前计算机专业现状,java开发工程师虽然容易找工作(这个也是在你在大学期间java基础学习的比较好,然后会一些框架,才能找到工作)但是java开发常常熬夜,楼主就是卷不动j ...

最新文章

  1. Linux监控工具dstat
  2. python算法书籍-你也能看得懂的Python算法书
  3. boost::callable_traits的has_varargs的测试程序
  4. android加载so文件失败,Android无法加载'.so.1'文件
  5. r语言教程w3c,R语言 数据库
  6. 了解JUnit的Runner架构
  7. Java正则之Unicode属性匹配的那些事
  8. java传感器编程_JSensorReader 无线传感器网络环境,直接从节点读取 采集数据的java程序 Script 249万源代码下载- www.pudn.com...
  9. python银行排队系统_python-我需要基于Web的系统的消息/排队解决...
  10. Spring Boot从Controller层进行单元测试
  11. jquery mobile页面跳转后js不执行的问题
  12. hdu2089不要62(数位dp)
  13. 7 年零故障支撑双 11,消息中间件 RocketMQ 如何做到?
  14. 举个栗子~Tableau 技巧(205 ):区域地图中呈现具体位置
  15. ajax传参遇到问题
  16. AI论文投稿前的自我反思
  17. java升序排列数组_java 数组升序排列
  18. 怎么把音乐中的伴奏提取出来?这几个方法值得尝试一番
  19. blank=True, null=True的区别
  20. springboot+oss文件批量打包下载

热门文章

  1. Yii的createCommand用法
  2. 无法访问javax.servlet.ServletException
  3. win10生成UWP软件打包 安装UWP软件
  4. JavaScript单线程异步的背后——事件循环机制
  5. python3 excel样式_xls0-python3my使用python.pandas修改excel样式
  6. phpStudy闪退
  7. html超链接qq临时会话,【一个小功能】点击图标/链接发起QQ临时会话
  8. cad二次开发 java_关于CAD二次开发,你究竟知道多少?
  9. 科技日新月异带来的影响
  10. 10款UML建模工具最近更新(2021年2月)(二)-EDraw、StarUML、SinelaboreRT