本次练习中是监听2个端口

applicationContext-mina.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//spring//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> 
<beans>

<bean 
  class="org.springframework.beans.factory.config.CustomEditorConfigurer"> 
  <property name="customEditors"> 
   <map> 
    <entry key="Java.net.SocketAddress"> 
     <bean 
      class="org.apache.mina.integration.spring.InetSocketAddressEditor" /> 
    </entry> 
   </map> 
  </property> 
 </bean>

<!--创建服务器-->

<bean id="ioAcceptor" 
  class="org.apache.mina.integration.spring.IoAcceptorFactoryBean"> 
  <property name="target"> 
   <bean 
    class="org.apache.mina.transport.socket.nio.SocketAcceptor" /> 
  </property> 
  <property name="bindings"> 
    <list>//这里是个list 里面可以创建多个监听 
    <bean 
     class="org.apache.mina.integration.spring.Binding"> 
     <property name="address" value=":8888" /> //监听端口:8888 
     <property name="handler" ref="SampleHandler" />// SampleHandler:定义服务器的handler 
     <property name="serviceConfig"> 
      <bean 
       class="org.apache.mina.transport.socket.nio.SocketAcceptorConfig"> 
       <property name="filterChainBuilder "//配置filter 
        ref="filterChainBuilder" /> //指向: filterChainBuilder 
       <property name="reuseAddress" value="true" /> 
      </bean> 
     </property> 
    </bean> 
     
    <bean 
     class="org.apache.mina.integration.spring.Binding"> 
     <property name="address" value=":9999" /> //第二个监听端口:9999 
     <property name="handler" ref="bossSampleHandler" /> //监听该端口的 handler 
     <property name="serviceConfig"> 
      <bean 
       class="org.apache.mina.transport.socket.nio.SocketAcceptorConfig"> 
       <property name="filterChainBuilder" 
        ref="filterChainBuilder" /> 
       <property name="reuseAddress" value="true" /> 
      </bean> 
     </property> 
    </bean> 
     
   </list> 
  </property> 
 </bean> 
 <bean id="SampleHandler" class="cn.org.handler.HandlerTwo" /> 
 <bean id="bossSampleHandler" class="cn.org.handler.HandlerOne" />

//定义filter 
 <bean id="filterChainBuilder" 
  class="org.apache.mina.integration.spring.DefaultIoFilterChainBuilderFactoryBean"> 
  <property name="filters"> 
   <list> 
    <bean 
     class="org.apache.mina.filter.codec.ProtocolCodecFilter"> 
     <constructor-arg> 
        <bean 
       class="org.apache.mina.filter.codec.textline.TextLineCodecFactory" />  //这个是编码格式filter 
     </constructor-arg> 
    </bean> 
    <bean class="org.apache.mina.filter.LoggingFilter" / >//日志的filter 
   </list> 
  </property> 
 </bean> 
</beans>

sprng的简单配置文件就是这样:

然后看 handler:

SampleHandler 和 bossSampleHandler 。我写的都是一样的:

package cn.org.handler;

import org.apache.mina.common.IdleStatus; 
import org.apache.mina.common.IoHandlerAdapter; 
import org.apache.mina.common.IoSession;

public class HandlerOne extends IoHandlerAdapter {

public HandlerOne() { 
  // TODO Auto-generated constructor stub 
 }

@Override 
 public void exceptionCaught(IoSession session, Throwable cause) 
   throws Exception {

}

@Override 
 public void messageReceived(IoSession session, Object message) 
   throws Exception { 
  // TODO Auto-generated method stub 
  System.out.println("收到信息"); 
  System.out.println("message :"+message.toString()); 
 }

@Override 
 public void messageSent(IoSession session, Object message) throws Exception { 
      System.out.println("小心发送"); 
 }

@Override 
 public void sessionClosed(IoSession session) throws Exception { 
  // TODO Auto-generated method stub 
  super.sessionClosed(session); 
 }

@Override 
 public void sessionCreated(IoSession session) throws Exception { 
  System.out.println(session.getRemoteAddress().toString() +"---create");

}

@Override 
 public void sessionIdle(IoSession session, IdleStatus status) 
   throws Exception { 
               System.out.println(session.getServiceAddress() +"IDS"); 
 }

@Override 
 public void sessionOpened(IoSession session) throws Exception { 
     System.out.println("连接打开:"+session.getLocalAddress()); 
 }

}

现在测试:

Test.java

public class Test {

/** 
  * @param args 
  */ 
 public static void main(String[] args) { 
  ClassPathXmlApplicationContext ct =    new ClassPathXmlApplicationContext("applicationContext-mina.xml");

}

}

控制台打印出:

2010-1-16 19:00:51 org.springframework.context.support.AbstractApplicationContext prepareRefresh 
信息: Refreshingorg.springframework.context.support.ClassPathXmlApplicationContext@4b4333: display name [org.springframework.context.support.ClassPathXmlApplicationContext@4b4333]; startup date [Sat Jan 16 19:00:51 CST 2010]; root of context hierarchy 
2010-1-16 19:00:51 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
信息: Loading XML bean definitions from class path resource [applicationContext-mina.xml] 
2010-1-16 19:00:51 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory 
信息: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@4b4333]:org.springframework.beans.factory.support.DefaultListableBeanFactory@1975b59
2010-1-16 19:00:52 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons 
信息: Pre-instantiating singletons inorg.springframework.beans.factory.support.DefaultListableBeanFactory@1975b59: defining beans [org.springframework.beans.factory.config.CustomEditorConfigurer#0,ioAcceptor,SampleHandler,bossSampleHandler,filterChainBuilder]; root of factory hierarchy

表明服务器就已经启动了:

现在你可以用telent的方式测试。也可以写个客户端的测试类:

写了个客户端的测试类:Clint.java

public class Clint {

/** 
  * @param args 
  */ 
  
 final static char end = 0x1a; 
  
 public static void main(String[] args) { 
     SocketConnector connector = new SocketConnector(); 
  SocketAddress address = new InetSocketAddress("127.0.0.1", 8888); 
  SocketConnectorConfig config = new SocketConnectorConfig(); 
  config.setConnectTimeout(10);// 秒 
  connector.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "GB2312" )))); //设置编码过滤器  
  connector.getFilterChain().addLast( "logger", new org.apache.mina.filter.LoggingFilter() );

IoSession session =null; 
  ConnectFuture cf = connector.connect(address, new ClintHandler(), 
    config); 
  cf.join(); 
  if (cf.isConnected()) { 
   session = cf.getSession(); 
   System.out.println("连接成功"); 
   session.write("abc"); 
  }else{ 
   System.out.println("连接失败!!!"); 
  }


 }

 
 

Ui篇--layout_weight体验(实现按比例显示)的更多相关文章

  1. layout_weight体验(实现按比例显示)

    在android开发中LinearLayout很常用,LinearLayout的内控件的android:layout_weight在某些场景显得非常重要,比如我们需要按比例显示.android并没用提 ...

  2. 转 layout_weight体验(实现按比例显示)

    http://www.cnblogs.com/zhmore/archive/2011/11/04/2236514.html 在android开发中LinearLayout很常用,LinearLayou ...

  3. iOS开发UI篇—UIScrollView控件实现图片缩放功能

    iOS开发UI篇—UIScrollView控件实现图片缩放功能 一.缩放 1.简单说明: 有些时候,我们可能要对某些内容进行手势缩放,如下图所示 UIScrollView不仅能滚动显示大量内容,还能对 ...

  4. iOS开发UI篇—UITableview控件基本使用

    iOS开发UI篇—UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) #import <Foundation/Foundation.h> ...

  5. iOS开发UI篇—CAlayer(自定义layer)

    iOS开发UI篇—CAlayer(自定义layer) 一.第一种方式 1.简单说明 以前想要在view中画东西,需要自定义view,创建一个类与之关联,让这个类继承自UIView,然后重写它的Draw ...

  6. iOS开发UI篇—CAlayer层的属性

    iOS开发UI篇—CAlayer层的属性 一.position和anchorPoint 1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint @property ...

  7. iOS开发UI篇—CAlayer(创建图层)

    iOS开发UI篇—CAlayer(创建图层) 一.添加一个图层 添加图层的步骤: 1.创建layer 2.设置layer的属性(设置了颜色,bounds才能显示出来) 3.将layer添加到界面上(控 ...

  8. iOS开发UI篇—CALayer简介

    iOS开发UI篇—CALayer简介   一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实 ...

  9. iOS开发UI篇—核心动画(UIView封装动画)

    iOS开发UI篇—核心动画(UIView封装动画) 一.UIView动画(首尾) 1.简单说明 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画 ...

随机推荐

  1. java基础知识回顾之java Socket学习(一)--UDP协议编程

    UDP传输:面向无连接的协议,不可靠,只是把应用程序传给IP层的数据报包发送出去,不保证发送出去的数据报包能到达目的地.不用再客户端和服务器端建立连接,没有超时重发等机制,传输速度快是它的优点.就像寄 ...

  2. 青鸟 王云鹏老师写的SqlHelper 泛型方法,反射,支持实体类

    1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: ...

  3. hdu1301Jungle Roads

    http://acm.hdu.edu.cn/showproblem.php?pid=1301 最小生成树模板题 #include<iostream> #include<stdio.h ...

  4. 安装ubuntu vi编辑无法正常使用的时候 如方向键变成ABCD

    http://blog.sina.com.cn/s/blog_7e3f6e8f0100vkon.html 在使用ubuntu的时候,发现vi编辑模式下退格键backspace和上下左右光标移动键不能用 ...

  5. 欧拉工程第70题:Totient permutation

    题目链接 和上面几题差不多的 Euler's Totient function, φ(n) [sometimes called the phi function]:小于等于n的数并且和n是互质的数的个 ...

  6. C++ Primer笔记整理

    1. 迭代器:迭代器是一种对象,它可以看做是游标,用来遍历标准模板库中的部分或者全部元素. 每个迭代器指向容器中确定的地址,此外,迭代器还提供一些基本操作符:*.++.==.!=.=. 2. 模板:是 ...

  7. JavaScript基础精华01(变量,语法,数据类型)

    JavaScript是一种脚本语言. 脚本,一条条的文字命令.执行时由系统的一个解释器,将其一条条的翻译成机器可识别的指令,然后执行 JavaScript基本组成 1.基本语法(浏览器基本都支持,有统 ...

  8. ossec 常用命令及目录说明

    1. /var/www/html/analogi -> ossec 第三方的web界面的安装目录 [root@ossec-server ~]# cd /var/www/html/analogi/ ...

  9. office开发心得——基于模板开发

    这几天正在写一个小程序,但用到生成word表格和Excel表格.到网上查了一些资料,发现如果生成表格模板相对比较固定即可把其制作成模板,需要设置什么格式可以直接在模板中设置,而程序仅需替换相应的内容即 ...

  10. How to upgrade boost libary using apt-get ?

    apt-get install libboost1.55-all-dev using version number between boost and all, but the preconditio ...