服务器端

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();

java网络编程5-SSL的更多相关文章

  1. Java - 网络编程完全总结

    本文主要是自己在网络编程方面的学习总结,先主要介绍计算机网络方面的相关内容,包括计算机网络基础,OSI参考模型,TCP/IP协议簇,常见的网络协议等等,在此基础上,介绍Java中的网络编程. 一.概述 ...

  2. 【转载】Java 网络编程

      本文主要是自己在网络编程方面的学习总结,先主要介绍计算机网络方面的相关内容,包括计算机网络基础,OSI参考模型,TCP/IP协议簇,常见的网络协议等等,在此基础上,介绍Java中的网络编程. 一. ...

  3. Java网络编程和NIO详解9:基于NIO的网络编程框架Netty

    Java网络编程和NIO详解9:基于NIO的网络编程框架Netty 转自https://sylvanassun.github.io/2017/11/30/2017-11-30-netty_introd ...

  4. Java网络编程与NIO详解11:Tomcat中的Connector源码分析(NIO)

    本文转载 https://www.javadoop.com 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.c ...

  5. 20145205 《Java程序设计》实验报告五:Java网络编程及安全

    20145205 <Java程序设计>实验报告五:Java网络编程及安全 实验要求 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.客户端中输入明文,利用DES算法加密,D ...

  6. Java 网络编程学习总结

    新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1]    网络编程认识                [2]  TCP/IP编程 ...

  7. 20145212 实验五《Java网络编程》

    20145212 实验五<Java网络编程> 一.实验内容 1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成 ...

  8. 20145213《Java程序设计》实验五Java网络编程及安全

    20145213<Java程序设计>实验五Java网络编程及安全 实验内容 1.掌握Socket程序的编写. 2.掌握密码技术的使用. 3.设计安全传输系统. 实验预期 1.客户端与服务器 ...

  9. 20145206《Java程序设计》实验五Java网络编程及安全

    20145206<Java程序设计>实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 我和201451 ...

  10. 20145337实验五Java网络编程及安全

    20145337实验五Java网络编程及安全 实验内容 掌握Socket程序的编写 掌握密码技术的使用 设计安全传输系统 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器 ...

随机推荐

  1. vue - v-text 和 v-html

    1.官方有了{{data}}绑定数据了,为啥还要v-text 因为网络问题,可以我们会卡到看“{{}}”,很尴尬吧!!! => 因此推荐用v-text 2. v-html是啥? 能吃吗 , v- ...

  2. vue - node_modules

    详情见:node_modules导包机制 在打包或者结束项目时,这个文件夹(node_modules)不应该被打包. 你应该打包其它的文件,如果要运行(直接用以下命令安装即可,它会根据package. ...

  3. Unity3d 录像

    flashtd1: 回复 tqfa :我觉得是有方法可以实现的,之前使用高通的增强显示开发包时发现其实它是添加了一个类似movietexture的东西,叠加在它的摄像机上 如果文档里有操作moviet ...

  4. Odoo,OpenERP widget标签

    Odoo,OpenERP widget标签 widget="statusbar" 头部状态条标签 widget="email"  电子邮件地址标签 widget ...

  5. 【Datastage】函数大全

    一. 类型转换函数 类型转换函数用于更改参数的类型. 以下函数位于表达式编辑器的"类型转换"类别中.方括号表示参数是可选的.缺省日期格式为 %yyyy-%mm-%dd. 以下示例按 ...

  6. 【Linux】行首、行尾添加字符串

    在行首或者行尾添加字符串的方式有以下2种 环境描述 test.txt文件内容如下: hello world Qinys 要求:在每一行的行首添加AAA,行尾添加666 VIM编辑状态添加 首先使用命令 ...

  7. maven自动打包到tomcat 8

    <build> <finalName>maven-project</finalName> <plugins> <plugin> <gr ...

  8. CSS3图片折角效果

    本篇文章由:http://xinpure.com/css3-picture-angle-effect/ 图片折角效果主要是通过设置 border 属性实现的效果 效果预览 效果解析 假设我们将一个元素 ...

  9. Caused by: java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/

    Caused by: Java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ ...

  10. java基础讲解04-----数据类型和运算符

    1.java的基本数据类型 1.数值型  { 整数型   byte  , short  ,int  ,long 浮点型   float , double } 2.字符型 3.布尔型 2.运算符 1.赋 ...