服务器端

System.out.println("等待客户端连接...");
File keyFile=new File("C:/Users/mu/Desktop/mu.p12");
InputStream stream=new FileInputStream(keyFile);
char[] password="123456".toCharArray(); //KeyStore用于存放证书,创建对象时 指定交换数字证书的加密标准
KeyStore keyStore=KeyStore.getInstance("pkcs12"); //KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(stream, password);
stream.close(); //KeyManager选择证书证明自己的身份
KeyManagerFactory keyManagerFactory=KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStore,password);
KeyManager[] keyManagers=keyManagerFactory.getKeyManagers(); //TrustManager决定是否信任对方的证书
TrustManagerFactory trustManagerFactory=TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);
TrustManager[] trustManagers=trustManagerFactory.getTrustManagers(); SSLContext context=SSLContext.getInstance("SSL");
context.init(keyManagers, trustManagers, null);
SSLServerSocketFactory factory=context.getServerSocketFactory();
SSLServerSocket serverSocket=(SSLServerSocket)factory.createServerSocket(3344);
SSLSocket socket=(SSLSocket)serverSocket.accept(); System.out.println("有客户端连接");
System.out.println("向客户端输出信息");
OutputStream outputStream=socket.getOutputStream();
BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(outputStream));
writer.write("hello world\r\n");
writer.write("\r\n");
writer.flush();
System.out.println("输出结束");
socket.close();
serverSocket.close();

客户端

System.out.println("准备连接服务端");
File keyFile=new File("C:/Users/mu/Desktop/mu.p12");
InputStream stream=new FileInputStream(keyFile);
char[] password="123456".toCharArray(); //指定交换数字证书的加密标准
KeyStore keyStore= KeyStore.getInstance("pkcs12");//KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(stream, password);
stream.close(); //TrustManager决定是否信任对方的证书
TrustManagerFactory trustManagerFactory=TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);
TrustManager[] trustManagers=trustManagerFactory.getTrustManagers(); SSLContext context=SSLContext.getInstance("SSL");
context.init(null, trustManagers, null);
SSLSocketFactory factory=context.getSocketFactory();
SSLSocket socket=(SSLSocket) factory.createSocket("localhost", 3344); InputStream inputStream=socket.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
String str=null;
while ((str=reader.readLine())!=null) {
if(str.equals(""))
break;
System.out.println(str);
}
socket.close();

最新文章

  1. C# DataTable 和List之间相互转换的方法
  2. thinkjs——空对象判断
  3. serialize-and-deserialize-bst
  4. 《C++Primer》复习——with C++11 [1]
  5. Upgrading to MySQL 5.7---focusing on temporal types
  6. jquery实现无外边框table
  7. 翻扣告诉你外出旅游时实用的一些小tips
  8. 一个web应用的诞生--使用模板
  9. JS学习笔记——JavaScript继承的6种方法(原型链、借用构造函数、组合、原型式、寄生式、寄生组合式)
  10. [BZOJ1031] [JSOI2007] 字符加密Cipher (后缀数组)
  11. Python 描述符是什么?以及如何实现
  12. .NETCore 下支持分表分库、读写分离的通用 Repository
  13. JMeter主要组件介绍
  14. HDU - 6127: Hard challenge(扫描线,atan)
  15. Android 与Java 进程退出 killProcess与System.exit
  16. cf1131f 构造+并查集
  17. Linux iptables原理和使用
  18. Spring Cloud :断路器集群监控(Turbine)
  19. es7预览
  20. JavaScript里的Date 对象属性及对象方法--实现简单的日历

热门文章

  1. NSPredicate模糊搜索和精确搜索
  2. HTML5学习笔记简明版(5):input的type超级类型
  3. DNS使用的是TCP协议还是UDP协议简析
  4. 不吐不快之EJB演练——开篇概述
  5. Nginx-负载均衡实践(一、对PHP-FPM进行分摊)
  6. 【Linux设备驱动程序】Chapter 1 - 概述
  7. 【转】打造自己的视频会议系统 GGMeeting(附送源码)
  8. web开发中常见的安全漏洞及避免方法
  9. mybatis开发流程,增删改查
  10. unity, 3dmax制作的morph(blendshape)导入unity中使用注意事项