- 浏览: 134826 次
文章分类
最新评论
前面几篇博文提到了Socket中一些常用的用法,但是对于一些有安全要求的应用就需要加密传输的数据,此时就需要用到SSLSocket了。
还是一样需要一个实现了java.io.Serializable接口的简单Java对象:
- package com.googlecode.garbagecan.test.socket.ssl;
- public class User implements java.io.Serializable {
- private static final long serialVersionUID = 1L;
- private String name;
- private String password;
- public User() {
- }
- public User(String name, String password) {
- this.name = name;
- this.password = password;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
SSL Server类,这里需要用到ServerSocketFactory类来创建SSLServerSocket类实例,然后在通过SSLServerSocket来获取SSLSocket实例,这里考虑到面向对象中的面向接口编程的理念,所以代码中并没有出现SSLServerSocket和SSLSocket,而是用了他们的父类ServerSocket和Socket。在获取到ServerSocket和Socket实例以后,剩下的代码就和不使用加密方式一样了。
- package com.googlecode.garbagecan.test.socket.ssl;
- import java.io.BufferedInputStream;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import javax.net.ServerSocketFactory;
- import javax.net.ssl.SSLServerSocketFactory;
- public class MyServer {
- private final static Logger logger = Logger.getLogger(MyServer.class.getName());
- public static void main(String[] args) {
- try {
- ServerSocketFactory factory = SSLServerSocketFactory.getDefault();
- ServerSocket server = factory.createServerSocket(10000);
- while (true) {
- Socket socket = server.accept();
- invoke(socket);
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- private static void invoke(final Socket socket) throws IOException {
- new Thread(new Runnable() {
- public void run() {
- ObjectInputStream is = null;
- ObjectOutputStream os = null;
- try {
- is = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
- os = new ObjectOutputStream(socket.getOutputStream());
- Object obj = is.readObject();
- User user = (User)obj;
- System.out.println("user: " + user.getName() + "/" + user.getPassword());
- user.setName(user.getName() + "_new");
- user.setPassword(user.getPassword() + "_new");
- os.writeObject(user);
- os.flush();
- } catch (IOException ex) {
- logger.log(Level.SEVERE, null, ex);
- } catch(ClassNotFoundException ex) {
- logger.log(Level.SEVERE, null, ex);
- } finally {
- try {
- is.close();
- } catch(Exception ex) {}
- try {
- os.close();
- } catch(Exception ex) {}
- try {
- socket.close();
- } catch(Exception ex) {}
- }
- }
- }).start();
- }
- }
SSL Client类和SSL Server类类似,只是将其中获取Socket的方式有所变化,其余的代码也和不使用加密方式一样。
- package com.googlecode.garbagecan.test.socket.ssl;
- import java.io.BufferedInputStream;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.net.Socket;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import javax.net.SocketFactory;
- import javax.net.ssl.SSLSocketFactory;
- public class MyClient {
- private final static Logger logger = Logger.getLogger(MyClient.class.getName());
- public static void main(String[] args) throws Exception {
- for (int i = 0; i < 100; i++) {
- Socket socket = null;
- ObjectOutputStream os = null;
- ObjectInputStream is = null;
- try {
- SocketFactory factory = SSLSocketFactory.getDefault();
- socket = factory.createSocket("localhost", 10000);
- os = new ObjectOutputStream(socket.getOutputStream());
- User user = new User("user_" + i, "password_" + i);
- os.writeObject(user);
- os.flush();
- is = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
- Object obj = is.readObject();
- if (obj != null) {
- user = (User)obj;
- System.out.println("user: " + user.getName() + "/" + user.getPassword());
- }
- } catch(IOException ex) {
- logger.log(Level.SEVERE, null, ex);
- } finally {
- try {
- is.close();
- } catch(Exception ex) {}
- try {
- os.close();
- } catch(Exception ex) {}
- try {
- socket.close();
- } catch(Exception ex) {}
- }
- }
- }
- }
代码写完了,下面就需要产生keystore文件了,运行下面的命令
- keytool -genkey -alias mysocket -keyalg RSA -keystore mysocket.jks
在提示输入项中,密码项自己给定,其它都不改直接回车,这里我使用的密码是“mysocket”。
运行Server
- java -Djavax.net.ssl.keyStore=mysocket.jks -Djavax.net.ssl.keyStorePassword=mysocket com.googlecode.garbagecan.test.socket.ssl.MyServer
运行Client
- java -Djavax.net.ssl.trustStore=mysocket.jks -Djavax.net.ssl.trustStorePassword=mysocket com.googlecode.garbagecan.test.socket.ssl.MyClient
发表评论
-
java中把对象、对象bean、list集合、对象数组、Map和Set以及字符串转换成Json
2013-05-13 13:13 1230主要实现把java对常用的一些数据转换成Json,以便前台的 ... -
(转载)Java Socket实战之四:传输压缩对象
2013-01-07 16:28 580上一篇文章说到了用Java Socket来传输对象,但是在有 ... -
(转载)Java Socket实战之三:传输对象
2013-01-07 16:25 660前面两篇文章介绍了怎样建立Java Socket通信,这一篇 ... -
(转载)Java Socket实战之二:多线程通信
2013-01-07 16:23 975说到怎样写一个最简单的Java Socket通信,但是在上一 ... -
(转载)Java Socket实战之一:单线程通信
2013-01-07 15:46 662现在做Java直接使用Socket的情况是越来越少,因为有很 ... -
map的三种遍历方法!
2012-12-20 16:54 623map的三种遍历方法! 集合的一个很重要的操 ... -
JAVA数组的定义及使用方法
2012-12-13 11:34 757数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来 ... -
(转载)fastJson
2012-12-13 10:48 638FastJSON是一个很好的java开源json工具类库,相比 ... -
(转载)FTP文件上传与下载
2012-12-06 15:14 796实现FTP文件上传与下载可以通过以下两种种方式实现(不知道还有 ... -
ORA-01460: 转换请求无法实现或不合理
2012-11-27 17:27 3902oracle10g数据库执行数据库更新sql时报错: Cau ... -
配置TOMCAT(,JAVA_HOMECATALINA_HOME,CLASSPATH)环境变量
2012-11-18 15:42 4661配置TOMCAT(,JAVA_HOMECATALI ... -
(转载)验证码无法显示:Could not initialize class sun.awt.X1 解决方案
2012-11-16 14:41 666网站验证码突然无法显示,并报如下错误。 Caused by: ... -
(转载)linux 下tomcat 报java.lang.OutOfMemoryError: PermGen space及其解决方法
2012-11-16 11:20 611PermGen space的全称是Permanent Gene ... -
JSP内置对象
2012-11-13 15:42 5571.request对象 客户端的请求信息被封装 ... -
用Java删除文件夹里的所有文件
2012-11-11 15:27 804import java.io.File;publ ... -
通过Java几行代码截取屏幕
2012-11-11 15:25 552通过java.awt.Robot的createScreenCa ... -
oracle日期类型字段的操作
2012-10-26 09:32 676在java对oracle的操作中 ... -
验证码无法显示:Could not initialize class sun.awt.X1 解决方案
2012-10-22 11:10 1001网站验证码突然无法显示,并报如下错误。 Caused by: ... -
http协议-简介
2012-09-29 17:43 743一、简介 超文本传输 ... -
java socket编程
2012-09-29 17:41 557一,网络编程中两个 ...
相关推荐
java socket使用加密协议传输对象
Socket实战系列: Socket实战——UDP连接:https://blog.csdn.net/haoranhaoshi/article/details/86601468 Socket实战——TCP连接:https://blog.csdn.net/haoranhaoshi/article/details/86601522 Socket实战——...
Java基于Socket文件传输示例:服务器端和客户端
主要介绍了Java Socket使用加密协议进行传输对象的方法,结合实例形式分析了java socket加密协议相关接口与类的调用方法,以及服务器、客户端实现技巧,需要的朋友可以参考下
java socket传输demo 客户端和服务器端传输demojava socket传输demo 客户端和服务器端传输demo
此代码为 tcp 协议传输 java socket 图片
JAVA Socket教程 Java网络编程之传输控制协议 Socket套接字—Java套接字编程
Java Socket传输图片源代码;短小精悍,适合初学者学习参考使用
java socket 大文件传输,快速传输, 数据包的分片,组装,涉及UDP,TCP传输技术,NIO非阻塞等等,适合对socket编程进一步学习的同学
Java Socket编程:文件传输
文件结构: Debug ...本案例通过一个基本协议,使用socket传送数据,能够达到大量数据发送不发生粘包等常见现象,在我本机测试,一次性能够传送的数据包大小为系统一次性能够读入的数据大小,大约为2个G
Java Socket编程 PC端程序 用来传输文件 包括服务器、客户端
基于java nio socket 的文件传输例程
java socket通信自定义消息协议,socket以字节码的方式通信传递,客户端与服务器端分别进行转换与解析的过程实现简单的消息协议。
java socket教程java socket教程java socket教程
Java基于Socket文件传输示例:服务器端和客户端
采用java socket编程,利用Internet传输各种类型的文件,在传输过程中数据完整,传输速度快等优点。
用JAVA实现的文件上传,控制台输入,保存到数据库
在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。 socket 的典型应用就是 ...