功能: 服务器启动后只支持 TLS/SSL 方式连接(不接受普通连接)
备注: TLS/SSL 实现是基于 MINA 的官方例子
地址: http://mina.apache.org/
客户端和服务器端通信内容:
客户端:我是安全的吗?
服务器:安全链接已建立!
服务器端代码:
package com.sariel.tls.server;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.ssl.SslFilter;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import com.sariel.tls.BogusSslContextFactory;
public class TLSServer {
private static final int PORT = 50003;
public static void main(String[] args) throws Exception {
/** 创建服务器端连接器 **/
SocketAcceptor acceptor = new NioSocketAcceptor();
acceptor.setReuseAddress(true);
/** 获取默认过滤器 **/
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
SslFilter sslFilter = new SslFilter(BogusSslContextFactory.getInstance(true));
/** 设置加密过滤器 **/
chain.addLast("sslFilter", sslFilter);
/** 设置编码过滤器和按行读取数据模式 **/
chain.addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
/** 设置事件处理器 **/
acceptor.setHandler(new TLSServerHandler());
/** 服务绑定到此端口号 **/
acceptor.bind(new InetSocketAddress(PORT));
System.out.println("服务器在 [" + PORT + "] 等待连接...");
}
}
package com.sariel.tls.server;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class TLSServerHandler extends IoHandlerAdapter {
public void sessionCreated(IoSession session) throws Exception {
System.out.println("[NIO Server]>> sessionCreated");
}
public void sessionOpened(IoSession session) throws Exception {
System.out.println("[NIO Server]>> sessionOpened");
}
public void sessionClosed(IoSession session) throws Exception {
System.out.println("[NIO Server]>> sessionClosed");
}
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
System.out.println("[NIO Server]>> sessionIdle");
}
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
System.out.println("[NIO Server]>> exceptionCaught :");
cause.printStackTrace();
}
public void messageReceived(IoSession session, Object message) throws Exception {
System.out.println("[NIO Server]>> messageReceived");
System.out.println("[NIO Server Received]>> : "+(String) message);
session.write("安全链接已建立!");
}
public void messageSent(IoSession session, Object message) throws Exception {
System.out.println("[NIO Server]>> messageSent");
System.out.println("[NIO Server messageSent]>> : " + (String) message);
}
}
客户端代码:
package com.sariel.tls.client;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import java.security.GeneralSecurityException;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.ssl.SslFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import com.sariel.tls.BogusSslContextFactory;
public class TLSClient {
private static final int PORT = 50003;
private static final String TARGET_IP = "192.168.12.41";
public static void main(String[] args) throws GeneralSecurityException {
/** 创建客户端连接器 **/
IoConnector connector = new NioSocketConnector();
SslFilter connectorTLSFilter = new SslFilter(BogusSslContextFactory.getInstance(false));
/** 设置为客户端模式 **/
connectorTLSFilter.setUseClientMode(true);
/** 设置加密过滤器 **/
connector.getFilterChain().addLast("SSL", connectorTLSFilter);
/** 设置事件处理器 **/
connector.setHandler(new TLSClientHandler());
/** 设置编码过滤器和按行读取数据模式 **/
connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
/** 创建连接 **/
ConnectFuture future = connector.connect(new InetSocketAddress(TARGET_IP, PORT));
/** 等待连接创建完成 **/
future.awaitUninterruptibly();
/** 获取连接会话 **/
IoSession session = future.getSession();
/** 发送信息 **/
session.write("我是安全的吗?");
/** 等待连接断开 **/
session.getCloseFuture().awaitUninterruptibly();
connector.dispose();
}
}
package com.sariel.tls.client;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class TLSClientHandler extends IoHandlerAdapter {
public void sessionCreated(IoSession session) throws Exception {
System.out.println("[NIO Client]>> sessionCreated");
}
public void sessionOpened(IoSession session) throws Exception {
System.out.println("[NIO Client]>> sessionOpened");
}
public void sessionClosed(IoSession session) throws Exception {
System.out.println("[NIO Client]>> sessionClosed");
}
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
System.out.println("[NIO Client]>> sessionIdle");
}
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
System.out.println("[NIO Client]>> exceptionCaught :");
cause.printStackTrace();
}
public void messageReceived(IoSession session, Object message) throws Exception {
System.out.println("[NIO Client]>> messageReceived");
System.out.println("[NIO Client Received]>>" + (String) message);
}
public void messageSent(IoSession session, Object message) throws Exception {
System.out.println("[NIO Client]>> messageSent");
System.out.println("[NIO Client messageSent]>> : " + (String) message);
}
}
源文件下载地址:
http://sariel.iteye.com/blog/470383
或直接下载地址:
http://dl.iteye.com/topics/download/432bf891-ec7c-31be-a7a4-ec1f67a4dd9d
分享到:
相关推荐
在本篇博文中,我们将深入探讨如何利用Apache MINA库实现基于TLS/SSL的NIO(非阻塞I/O)Socket通信。MINA是一个高度可扩展的网络应用框架,广泛用于构建高性能、高并发的网络应用程序,如服务器端的TCP和UDP服务。...
在Java世界中,网络编程是一个不可或缺的部分,而Mina NIO(Non-blocking I/O)Socket库则是Java开发者实现高性能、高并发网络服务的重要工具。本文将深入探讨Mina NIO Socket的核心概念、工作原理以及在实际项目中...
在服务端,无论是Socket、NIO还是Mina,都需要创建监听套接字来接收客户端连接,并为每个连接创建一个新的套接字或通道。而在客户端,需要建立到服务器的连接,发送和接收数据。 总结来说,这个"网络编程(socket、...
在Mina与Socket通信的实现中,服务端通常使用Mina来创建一个Acceptor,监听特定端口,等待客户端的连接请求。一旦有连接建立,Mina会自动触发相应的事件处理器,开发者可以在其中处理数据读写。以下是一个基本的...
mina框架是Apache组织开发的一个网络通信框架,它基于Java NIO(非阻塞I/O)构建,用于简化网络编程,尤其是TCP和UDP协议的应用开发。本项目提供了服务端和客户端的示例,使得开发者能够更好地理解和应用MINA框架。 ...
Socket Mina测试框架是一个强大的网络通信应用框架,主要用于简化Java应用程序与远程服务器之间的通信。它提供了高度可扩展和高性能的I/O处理模型,使得开发者能够更专注于业务逻辑,而不是底层的网络实现细节。Mina...
除了基本的网络通信功能,Mina还提供了许多附加特性,如心跳检测、会话管理、身份验证、SSL/TLS加密等。这些功能使得Mina成为一个全面的网络服务开发框架,能够满足不同应用场景的需求。 在实际项目中,使用Mina...
1. **事件驱动模型**:Mina采用了非阻塞I/O(NIO)模式,基于Java的Selector API,使得单线程可以高效处理大量并发连接。 2. **协议无关性**:Mina支持多种网络协议,如TCP/IP、UDP、SSL/TLS等,并且可以通过插件化...
8. **安全性**:MINA支持SSL/TLS加密,可以保护传输数据的安全。在实际应用中,确保数据传输安全是必不可少的,尤其是在涉及敏感信息的实时推送服务中。 9. **扩展性**:MINA框架的模块化设计使得它易于扩展,可以...
利用 Mina 可以高效地完成以下任务: <br>TCP/IP 和 UDP/IP 通讯 串口通讯 VM 间的管道通讯 SSL/TLS JXM 集成 IoC 容器集成( Spring 、 Pico 等) 状态机 <br>据官方评测, APR 的...
在这个“Mina服务端例子”中,我们主要探讨的是如何使用Mina框架来实现一个基于Socket的非阻塞I/O(NIO)服务端。 1. **Mina框架介绍**: Mina提供了事件驱动和异步处理模型,使得开发者可以专注于业务逻辑,而...
MinA Socket是Apache软件基金会下的一个开源项目,全称为“MINA (Multi-purpose Infrastructure for Network Applications)”,它提供了一个高性能、可伸缩的网络应用程序框架,用于开发基于TCP/IP和UDP/IP协议的...
MINA的核心理念是提供一套统一的API,让开发者能够处理各种类型的网络协议,如TCP/IP、UDP/IP以及SSL/TLS等,而无需关心底层的I/O实现。在MINA中,所有的网络通信操作都通过事件驱动和异步回调的方式来完成,这使得...
《minafileserver:基于Socket与Mina的文件传输实践》 在IT行业中,网络通信是不可或缺的一部分,尤其是在分布式系统和互联网应用中。Apache Mina是一个轻量级、高性能的网络应用框架,它简化了网络编程,尤其是TCP...
5. **丰富的API**:MINA提供了丰富的API,包括Socket和Datagram API,以及用于处理SSL/TLS安全通信的API。 6. **易于扩展**:MINA的设计使得添加新协议或扩展现有功能变得简单。 教程中的文件可能包含以下内容: ...
Mina支持多种协议,如TCP/IP、UDP、SSL/TLS等,并且提供了事件驱动、非阻塞I/O模型,这使得它在处理大量并发连接时表现出色。 1. **事件驱动模型**:Mina采用基于事件的I/O模型,当网络事件(如数据接收、连接建立...
Mina框架的强大之处在于它的灵活性和扩展性,你可以根据需求添加更多的过滤器,实现更复杂的功能,比如心跳检测、SSL/TLS加密、性能监控等。 在深入学习Mina时,建议查阅官方文档,参与社区讨论,以及参考已有的...
7. **丰富的API**:MINA提供了丰富的API,包括对SSL/TLS的支持,方便开发者构建安全的网络应用。 在“mina-2.0.0-RC1”这个版本中,你可以期待看到以下内容: - **源代码组织**:MINA的源代码通常按照模块进行组织...
在TCP方面,MINA提供了基于NIO(Non-blocking I/O)的API,可以用于构建高性能的TCP服务器。而在UDP方面,MINA同样支持非阻塞的UDP通信,适用于需要广播或多播的场景。 在"apache-mina-2.0.4-bin"压缩包中,主要...
4. **支持多种协议**:除了TCP/IP和UDP/IP之外,Mina还支持SSL/TLS等安全协议。 ### Mina的开发环境搭建 1. **下载并配置依赖库**: - 下载Mina库:访问官方下载页面http://mina.apache.org/downloads.html获取...