Java - Apache Mina 簡單示例
一、關於
Apache MINA 是一個網路應用程式框架,它對Java中的socket和NIO進行了有效和清晰的封裝,方便開發人員開發TCP/UDP程式,從而拋開在使用原始的socket時需要考慮的各種繁雜而又煩人問題(執行緒、效能、會話等),把更多精力專著在應用中的業務邏輯的開發上。
二、示例
1、相關準備
下載Mina,建立工程,新增mina核心的jar和slf4j的jar
2、伺服器端
(1)Main
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
public class ServerMain {
public static void main(String[] args) throws IOException {
// 監聽連線物件 基於tcp/ip
IoAcceptor acceptor = new NioSocketAcceptor();
// 繫結埠
SocketAddress address = new InetSocketAddress("localhost", 8888);
// 獲取過濾器鏈
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
// 新增日誌過濾器
chain.addLast("logger", new LoggingFilter());
// 配置資料的編解碼器 這裡使用了序列化編解碼工廠
chain.addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
acceptor.setHandler(new ServerHandler());
// 繫結伺服器埠
acceptor.bind(address);
System.out.println(" 伺服器在 8888 埠監聽.......");
}
}
(2)Handler
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
/**
* 自定義Handler需實現IoHandler介面,可通過繼承IoHandlerAdapter來完成
*/
public class ServerHandler extends IoHandlerAdapter{
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
// 接受訊息
System.out.println("伺服器端接接收到的訊息:" + message.toString());
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
// 傳送訊息
super.messageSent(session, message);
}
@Override
public void sessionOpened(IoSession session) throws Exception {
// 已建立會話
System.out.println("客戶端已連線...");
session.write("歡迎到連線Mina伺服器!!!"); //這裡也可以傳送其他實現了Serializable介面的物件
}
}
3、客戶端
(1)Main
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
public class ClientMain {
public static void main(String[] args) {
// 建立連線物件,基於tcp/ip
NioSocketConnector connector = new NioSocketConnector();
SocketAddress address = new InetSocketAddress("localhost", 8888);
// 獲取過濾器鏈
DefaultIoFilterChainBuilder chain = connector.getFilterChain();
// 新增日誌過濾器
chain.addLast("logger", new LoggingFilter());
// 配置資料的編解碼器
chain.addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
// IoHandler的作用: 業務處理的裝置
// 新增Handler
connector.setHandler(new ClientHandler());
// 連線到伺服器
ConnectFuture future = connector.connect(address);
// 等待資料傳送完畢
future.awaitUninterruptibly();
// 關閉連線
// connector.dispose();
}
}
(2)Handler
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
public class ClientHandler extends IoHandlerAdapter{
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
// 接收
System.out.println("客戶端接收到的訊息:" + message);
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
// 傳送
super.messageSent(session, message);
}
@Override
public void sessionOpened(IoSession session) throws Exception {
// 已建立會話
System.out.println("已經連線到了伺服器....");
session.write("Mina伺服器端,你好!!!");
}
}
3、結果
(1)伺服器端
(2)客戶端
三、說明
IoFilter的作用:接收資料,編/解碼,將資料傳遞到邏輯層
IoHandler的作用:業務處理的裝置
四、資源
http://download.csdn.net/detail/u013379717/7574657
相關文章
- Java - Apache Mina 自定義協議通訊JavaApache協議
- Apache Mina實戰Apache
- Java使用ObjectMapper的簡單示例JavaObjectAPP
- AOP的簡單示例
- jsoncpp簡單示例JSON
- 從一個簡單的Java單例示例談談併發Java單例
- C# superSocket簡單示例C#
- jquery驗證簡單示例jQuery
- oracle審計簡單示例Oracle
- Kafka實戰-簡單示例Kafka
- akka入門-簡單示例
- Apache MiNa + smack +openfilre 實現多人聊天室ApacheMac
- sed命令簡單使用示例分享
- Windows守護程式簡單示例Windows
- Python函式簡單示例Python函式
- jquery函式$.proxy簡單示例jQuery函式
- oracle的訊息簡單示例Oracle
- [zz]makefile寫法簡單示例
- spring整合mina簡明教程Spring
- 簡單比較 Apache Kafka 和 Apache Pulsar要點 - JaroslawApacheKafkaJARROS
- Python 裝飾器簡單示例Python
- 超簡單入門Vuex小示例Vue
- flv.js簡單使用示例JS
- SQL server觸發器簡單示例SQLServer觸發器
- 【GLSL教程】(四)shder的簡單示例
- gpt給出的operator簡單示例GPT
- 正規表示式中環視的簡單應用示例【基於java】Java
- 朝花夕拾之socket的基本使用以及mina框架簡單介紹框架
- WebGL簡易教程(一):第一個簡單示例Web
- Apache Kafka簡單介紹 - 解道JdonApacheKafka
- Apache CXF 與 Spring 整合簡單例子ApacheSpring單例
- Hbase、Hive、Impala資料同步簡單示例Hive
- Docker(3):Dockerfile介紹及簡單示例Docker
- Kafka簡單示例以及常用命令Kafka
- Spark Streaming簡單入門(示例+原理)Spark
- [譯]ViewModels:一個簡單的示例View
- arguments的應用示例簡單介紹
- 簡單建立序列和觸發器示例觸發器