功能: 服务器启动后只支持 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
分享到:
相关推荐
NULL 博文链接:https://sariel.iteye.com/blog/470383
NULL 博文链接:https://ginge.iteye.com/blog/363178
基于MINA构建简单高性能的NIO应用,提出了JAVA NIO在MINA上的简单应用
基于MINA构建高性能的NIO应用
基于Mina架构开发的可配置的Socket Server,后台采用MySql数据库,可以独立app部署或Tomcat Servlet部署,包括Socket Server全部实现代码,后台MySql数据备份文件,Java测试代码,android端测试代码和iOS端测试代码...
常见NIO开源框架(MINA、xSocket)学习 基于io包的阻塞式socket通信代码简单,在连接数很少的情况下是一个不错的选择。不过实际应用中一个socket服务器采用传统的阻塞式socket方式通信可能会是一场灾难,一路...
本库是对我在项目中使用的Mina和长连接的一个封装,亲测有效,在网络良好的情况下,几乎能够保证100%的连接和通讯;
socket的tcp/udp(多播) nio的tcp/udp mina 均有服务端/客服端
mina简单示例,Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速...
通过Mina与Socket实现通信,其包含客户端与服务端的实现代码
niosocket及其开源框架MINA学习总结收集.pdf
NULL 博文链接:https://joe-zhjiang.iteye.com/blog/801689
Ioserver java Nio socket 框架 是个不错的NIO 通讯框架,本来想学习mina框架,看了看mina的源码太头痛,本人觉得看懂了Ioserver 再看mina的框架,想多的学习 java NIO 的也可以下载 看看,很值得学习啊!!!
使用方法见:https://blog.csdn.net/upset_ming/article/details/96491058 1. 修改了前一版本中证书验证的bug,支持JDK8的高版本 2. 支持国密SSL双向认证 3. 将过期的国密证书替换为新证书
包含用如何用MINA建立简单的NIO应用例子(一个时间服务器响应多个客户端的请求),以及和如何优化使你的NIO服务器达到性能最佳
Java_NIO基础教程、MINA教程, 并附上基于springboot 整合mina的基础平台框架,可以直接使用,也可以借鉴下
NULL 博文链接:https://shiwujie.iteye.com/blog/1045272
基于MINA构建简单高性能的NIO应用,MINA的好东东
1.mina socket客户度工程相关类,添加mina jar包后可独立运行。 2.mina若有空闲连接则使用已有连接,若无则新建mina连接; 3.mina空闲连接超过保活时间25分钟后,自动删除; 4.mina发送指令后,接收指定时长内收到的...
整理:网站建设与网站制作公司-VeiSun.Com)简单介绍:MINA框架是对java的NIO包的一个封装,简化了NIO程序开发的难度