java websocket ssl_java websocket client ssl(wss) | 学步园_weixin_39587010的博客-程序员ITS301

技术标签: java websocket ssl  

2.因为要在android上使用websocket,要求使用wss,这时候我就选择了java_websocket(http://java-websocket.org/)

这个ws客户端对wss支持不好,源码中的wss client 还要使用证书。我的想法是不验证证书。将他的代码稍作修改:

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStreamReader;

import java.net.URI;

import java.security.KeyStore;

import javax.net.ssl.KeyManagerFactory;

import javax.net.ssl.SSLContext;

import javax.net.ssl.TrustManagerFactory;

import org.java_websocket.WebSocket;

import org.java_websocket.client.DefaultSSLWebSocketClientFactory;

import org.java_websocket.client.WebSocketClient;

import org.java_websocket.handshake.ServerHandshake;

class WebSocketChatClient extends WebSocketClient {

public WebSocketChatClient( URI serverUri ) {

super( serverUri );

}

@Override

public void onOpen( ServerHandshake handshakedata ) {

System.out.println( "Connected" );

}

@Override

public void onMessage( String message ) {

System.out.println( "got: " + message );

}

@Override

public void onClose( int code, String reason, boolean remote ) {

System.out.println( "Disconnected" );

System.exit( 0 );

}

@Override

public void onError( Exception ex ) {

ex.printStackTrace();

}

}

public class SSLClientExample {

// always verify the host - dont check for certificate

final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {

public boolean verify(String hostname, SSLSession session) {

return true;

}

};

/**

* Trust every server - dont check for any certificate

*/

private static void trustAllHosts(AppWebSocketClient appClient) {

// Create a trust manager that does not validate certificate chains

TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {

public java.security.cert.X509Certificate[] getAcceptedIssuers() {

return new java.security.cert.X509Certificate[]{};

}

public void checkClientTrusted(X509Certificate[] chain,

String authType) throws CertificateException {

}

public void checkServerTrusted(X509Certificate[] chain,

String authType) throws CertificateException {

}

}};

// Install the all-trusting trust manager

try {

SSLContext sc = SSLContext.getInstance("TLS");

sc.init(null, trustAllCerts, new java.security.SecureRandom());

appClient.setWebSocketFactory(new DefaultSSLWebSocketClientFactory(sc));

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main( String[] args ) throws Exception {

WebSocket.DEBUG = true;

WebSocketChatClient chatclient = new WebSocketChatClient( new URI( "wss://localhost:8887" ) );

trustAllHosts(appClient);

chatclient.connectBlocking();

BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );

while ( true ) {

String line = reader.readLine();

if( line.equals( "close" ) ) {

chatclient.close();

} else {

chatclient.send( line );

}

}

}

}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39587010/article/details/114203258

智能推荐

熊猫烧香C语言源代码,熊猫烧香病毒是不是用C语言编的_weixin_39564368的博客-程序员ITS301

满意答案5li73qyb2013.04.08采纳率:55%等级:12已帮助:10174人是delphi写的听说C#牛的话也可以写“熊猫烧香”,这是一个感染型的蠕虫病毒,它能感染系统中exe,com,pif,src,html,asp等文件,它还能中止大量的反病毒软件进程并且会删除扩展名为gho的文件,该文件是一系统备份工具GHOST的备份文件,使用户的系统备份文件丢失。被感染的用户系统中所有...

【程序员面试金典】原串翻转_究极死胖兽的博客-程序员ITS301_程序员面试经典

【程序员面试金典】原串翻转题目请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。 给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。 测试样例: “This is nowcoder” 返回:”redocwon si sihT”解答 string reverseStri

drain open 线与_开漏(Open-Drain)和推挽(Push-Pull)输出_weixin_39882317的博客-程序员ITS301

|收藏漏级开路即高阻状态,适用于输入/输出,其可独立输入/输出低电平和高阻状态,若需要产生高电平,则需使用外部上拉电阻或使用如LCX245等电平转换芯片。有些朋友,尤其是未学过此方面知识的朋友,在实际工作中将I/O口设置为漏开,并想输出高电平,但向口线上写1后对方并未认出高电平,但用万用表测量引脚确有电压,这种认为是不对的,对于高阻状态来说,测量电压是无意义的,正确的方法应是外加上拉电阻,上拉电阻...

程序清单4.5_defines.c程序_《C Primer Plus》P67_weixin_34391445的博客-程序员ITS301

//defines.cpp:定义控制台应用程序的入口点。///*defines.c--使用limits.h和float.h中定义的常量*//*时间:2018年06月12日23:01:03代码:程序清单4.5_defines.c程序_《CPrimerPlus》P67目的:初步了解limits.h和float...

VUE的cube-ui的scroll滚动到底部的方法_qq_37099009的博客-程序员ITS301_cube-ui scroll怎么使用

先给组件上个id 这里叫aa<cube-scroll id="aa" ref="scroll" style="height: 300px;"> ....... </cube-scroll>在VUE里先声明一个变量scrollYscrollY: 0,然后传值过去 ,scrollY就是组件当前高度了内容越多,scrollY也就越大this.scrollY ...

Sysstat的工具集sar、 iostat、mpstat、sadf、sar、sadc_aecuhty88306453的博客-程序员ITS301

sysstatSysstat的工具集sar、 iostat、mpstat、sadf、sar、sadc* iostat 工具提供CPU使用率及硬盘吞吐效率的数据;* mpstat 工具提供单个处理器或多个处理器相关数据;* sar 工具负责收集、报告并存储系统活跃的信息;* sa1 工具负责收集并存储每天系统动态信息到一个二进制的文件中。它是通过计划任务工具cr...

随便推点

hadoop-ha配置_隔壁老杨hongs的博客-程序员ITS301_hadoop ha在zk的那个位置

HADOOP HA配置hadoop2.x的ha配置,此文档中描述有hdfs与yarn的ha配置。此文档的假定条件是zk已经安装并配置完成,其实也没什么安装的。hdfs ha配置 首先,先配置core-site.xml配置文件:在老版本中使用mr1时,还可能使用fs.default.name来进行配置  fs.defaultFS此处配置的mycluster目前还没

给Spring的placeholder设置默认值_powerfulzyh的博客-程序员ITS301

给Spring的placeholder设置默认值使用Spring时,可以方便地通过placeholder的形式${key}将key对应的properities定义value,注入到Bean中。但是如果在properities文件中,没有对key定义,默认情况下Spring启动创建Bean时会报找到key的错误。解决办法:一是将对应的key=value写入properies文件中,value可以为

oracle中DBMS_JOB和DBMS_SCHEDULER创建job的区别_jxw201615060094的博客-程序员ITS301

DBMS_JOB和DBMS_SCHEDULER创建的job信息存储在不同的数据字典中,其中,通过DBMS_JOB创建的job信息存储在user_jobs,而通过DBMS_SCHEDULER创建的job信息存储在user_scheduler_jobs中。通过DBMS_SCHEDULER创建的job信息存储在以下表中:SELECT state, t.* from user_scheduler_jobs t;select * from user_scheduler_job_log order by lo

java统计数据并导出Excel__蔚然的博客-程序员ITS301

业务代码:@RequestMapping(value = "/exportDepartStatistics.html") @ResponseBody public HashMap<String, Object> exportDepartStatistics(HttpServletRequest request, HttpServletResponse response...

GloVe:Global Vectors for Word Representation_BUPT-WT的博客-程序员ITS301

论文总体结构:一、摘要 主要提出新的词向量学习方法glove,利用全局统计信息和局部上下文信息学习 1、当前词向量学习模型能够通过向量的算数计算捕捉之间语法和语意规律,但是背后的规律依旧不可解释 2、经过仔细分析,发现了一种有助于这种洗向量规律的特性,并基于词提出了一种新的对数双线性回归模型,该模型利用矩阵分解和局部上下文的有点来学习词向量 3、模型通过只在共现矩阵非0位置训练达到高效训练的目的 4、模型在词对推理任务上75%的...

怎么取消全局设置box-sizing: border-box_小轻知的博客-程序员ITS301_取消box-sizing

添加box-sizing: content-box,两者之间的区别Chrome浏览器box-sizing默认是content-box,content-box:元素的border和padding等不能算在元素的width和height中 ,padding和border的改变不能改变width和height的值。border-box就是用元素内容和padding和border一起决定width和heightborder-box:元素的宽高 - ( border + padding )...

推荐文章

热门文章

相关标签