public static void main(String args[]){
try {
SSLContext sslContext = SSLContext.getInstance("tlsv1");
sslContext.init(getKeyManagers("server.jks", "123456"), new TrustManager[]{x509}, null);
SocketAcceptor acceptor = new NioSocketAcceptor();
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
SslFilter sslFilter = new SslFilter(sslContext);
sslFilter.setNeedClientAuth(true);
chain.addLast("ssl", sslFilter);
LoggingFilter loggerFilter = new LoggingFilter();
chain.addLast("logger", loggerFilter);// log过滤器
/**
*I suspect that most start ProtocolCodecFilter problem, but then I tried to use TextLineCodecFactory then can not send data!
*/
chain.addLast("codec", new ProtocolCodecFilter(new VargoProtocolCodecFactory()));
//chain.addLast("protocal", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
acceptor.setHandler(new TempTLSServerHandler());
final InetSocketAddress address;
if(args!=null && args.length>0 && args[0]!=null){
address = new InetSocketAddress(Integer.parseInt(args[0]));
}else {
address = new InetSocketAddress(8012);
}
acceptor.bind(address);
System.out.println("Server run as :" + address.toString());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (GeneralSecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
客户端:
if (mConnector == null) {
mConnector = new NioSocketConnector();
mConnector.setDefaultRemoteAddress(new InetSocketAddress("192.168.1.78", 8012));
IoHandlerListener listener = new IoHandlerListener(bean[0]);
mConnector.setHandler(listener);
try {
SSLContext sslContext = SSLContext.getInstance("ssl");
sslContext.init(getKeyManagers(mContext,"123456"),new TrustManager[] { new X509TrustManager() }, new SecureRandom());
SslFilter sslFiler = new SslFilter(sslContext);
sslFiler.setNeedClientAuth(false);
sslFiler.setUseClientMode(true);
mConnector.getFilterChain().addLast("SslFilter",sslFiler);
//mConnector.getFilterChain().addLast("protocal", new ProtocolCodecFilter(new VargoProtocolCodecFactory()));// vargo协议Filter
mConnector.getFilterChain().addLast("protocal", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
} catch (GeneralSecurityException e) {
e.printStackTrace();
Log.i(LOG_TAG, "connect server error.....");
} catch (IOException e) {
e.printStackTrace();
Log.i(LOG_TAG, "connect server error.....");
}
}
ConnectFuture connectFuture = mConnector.connect();
connectFuture.awaitUninterruptibly();
IoSession session = connectFuture.getSession();
if (session != null && session.isConnected()) {
Log.i(LOG_TAG, "connect server success.....");
} else {
Log.i(LOG_TAG, "connect server error.....");
}
服务器调用public void sessionOpened(IoSession session)方法session.write android客户端可以发送正常收到的数据。那时我正在android public void sessionOpened(IoSession session)方法发送数据到服务器无法发送。客户端messageSent方法尚未被调用!我试过,如果我摆脱任何证书验证结束。您将被提示握手失败!