1. 程式人生 > >mina在spring中的配置多個埠

mina在spring中的配置多個埠

本次練習中是監聽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 
資訊: Refreshing
org[email protected]4b4333 : display name [org[email protected]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[email protected]4b4333]:
org.s[email protected]1975b59 
2010-1-16 19:00:52 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons 
資訊: Pre-instantiating singletons in
org.s[email protected]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("連線失敗!!!"); 
  }

    } 
 }

相關推薦

Tomcat配置工程使用不同訪問問題

因為沒有深入的去學習Tomcat,所以下面的方法只是簡單的解決了這個問題。 第一種方式是: Eclispse使用的是安裝版的Tomcaat,專案直接釋出到Tomcat/webapps目錄下。 直接去Tomcat中去修改server.xml檔案,將檔案內容修

mina在spring配置

本次練習中是監聽2個埠 applicationContext-mina.xml: <?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN/

django配置mongodb數據庫

默認 bsp def imp test string body mode name 在Djnago中使用MongoDB數據庫時,使用mongoengine模塊。在settings中配置數據庫連接如下: from mongoengine import co

c++配置環境的格式

alt bsp c++ ++ 分享 image acp tdi bin 例:環境1=$(QTDIR)\bin 環境2=$(PATH) 環境3=E:\軟件\辦公\Vimba_2.1\VimbaCPP\Bin\Win64 具體配置為 PATH=$(QTDIR)\bin%3b$(

spring security 配置 AuthenticationManager

基於spring-security4.2.x和security-oauth2.3.x 在使用Security配置Oauth2.0的時候需要多個authenticationManager來管理來自不同方向的認證管理,比如一個clientAuthenticationManager用來認證client

oracle新增配置監聽

原來配置:listener.ora檔案如下: LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-L9P3QTT)(PORT = 1521)) (ADDRESS = (PROTOCO

Tomcat配置網站,站點的方法

最近想要在tomcat中部署多個網站,但是不知道怎麼配置,通過查詢資料和摸索,發現要實現這一點其實還是很簡單的。 如何利用Tomcat建立多個Web應用 呢? 重點就是:server.xml檔案的配置 找到server.xml配置檔案中的<Host>節點,通過增加h

JavaWeb 如何在web.xml配置servlet

之前遇到這個問題,被困擾的不行,終於在學習我們學校大神的程式碼後明白了,決定發出來,也方便以後自己檢視 ​ <servlet> <description></description> <display-name>ListBook

log4j.xml 配置輸出檔案

現在的專案中,對於日誌的配置,我們有時候需要配置對應不同的輸出日誌檔案,例如按照模組劃分,按照功能劃分,分別輸出到不同的日誌檔案中,下面介紹一下,怎麼配置不同的輸出日誌檔案。 下面是一整塊的log4j.xml配置。如果對怎麼配置spring 和 log4j不瞭解的話,可以參

classpath:和classpath*:的區別以及web.xml配置xml檔案

首先我們都知道要使用spring,則需要在web.xml中增加如下程式碼:  Xml程式碼    <listener>  <listener-class>org.springframework.web.context.ContextLoaderList

同一個tomcat配置對應不同的app

今天有人問我,同一個tomcat部署多個app的話,要管理不同的埠,該如何配置,我的總結如下: <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.sta

在spring boot配置DispatcherServlet

spring boot為我們自動配置了一個開箱即用的DispatcherServlet,對映路徑為‘/’,但是如果專案中有多個服務,為了對不同服務進行不同的配置管理,需要對不同服務設定不同的上下文,比如開啟一個DispatcherServlet專門用於rest服務。 傳統springMVC專案 在傳統的spr

ehchche配置配置快取物件

Ehcache不允許建立同樣名稱的CacheManager物件。如果我們沒有ehcache.xml中配置CacaheManager的名稱,那麼預設的名稱是__DEFAULT__。解決方式是<ehcache name="">中配置CacheManager的名稱,並

tomcat配置

一、Tomcat 安裝後本身提供了一個server,埠配置預設是8080,對應目錄為:..\Tomcat 6.0\webapps 二、Tomcat 6.0 配置多個埠,其實也就是給Tomcat增加幾個server,並設定對應目錄。下面以增加兩個埠號為例 第一步、修改serv

Tomcat8配置訪問各對應的JavaWeb專案

背景:最近遇到個專案部署的小要求:一個tomcat下配置多個埠去訪問埠對應的JavaWeb專案原理:tomcat中conf下server.xml檔案中的service節點即可配置tomcat的埠號及對應的專案配置步驟:1.開啟tomcat下conf資料夾中的serve.xml

Tomcat配置號或應用,使得域名後面加不同訪問

1.一個Tomcat下配置多個埠號,這裡是針對一個應用服務而言,只需在Service下配置多個<Connector>。如下: <Server port="8005" shutdown="SHUTDOWN" debug="0"> <Service

Maven pom配置遠端倉庫

原文地址:http://www.xuebuyuan.com/1124933.html <repositories> <repository> <id>datanucleus</id> <url>

struts2配置struts.xml配置檔案

  一般來說我們在做開發的時候,是一個團隊,我們可能會按照人來分不同的模組,每個人維護自己不同的struts配置檔案,但在最後整合的時候,一定要把各人所用到的配置檔案都整合進來,這裡有一個方法,用是在你寫的主要的配置檔案中把別的配置檔案導進來,   在struts.

在SpringBoot配置cache,實現cacheManager靈活切換

SpringBoot配置多個cache,實現多個cacheManager靈活切換 注:本文所用的springBoot版本號為1.5.6.6 目的&效果 在springBoot中同時配置了RedisCache和ehCache,當使用@Cacheable註解

apache 配置,部署專案

修改httpd.conf配置檔案     1、新增監聽埠 Listen 70   2、配置要訪問的專案,在httpd.conf檔案中新增如下內容 <VirtualHost *:70>     DocumentRoot /home/CMS/GYCMS/