小编Jur*_*y A的帖子

如何减少ssl握手的等待时间?

我从http://sanjaal.com/java/tag/get-public-key-of-ssl-certificate-in-java/获得以下代码,用于创建套接字并启动ssl握手.

SSLSocketFactory factory = HttpsURLConnection
.getDefaultSSLSocketFactory();

System.out.println("Creating a SSL Socket For "+hostname+" on port "+port);

SSLSocket socket = (SSLSocket) factory.createSocket(hostname, port);

socket.startHandshake();
System.out.println("Handshaking Complete");
Run Code Online (Sandbox Code Playgroud)

问题是如果握手无法建立,在看到异常之前需要很长的等待时间:连接超时

如何设置最长等待时间?什么是确保我ssl握手不会成功的最短时间.

java networking network-programming sslhandshakeexception

2
推荐指数
1
解决办法
6006
查看次数

.getInetAddress()的返回不是实际的IP

我从一个函数中获取以下代码,该函数将主机名作为输入,并且应该为该主机提取证书.我需要显示远程主机的IP地址.我使用".getInetAdress()"来返回远程主机的IP:http://docs.oracle.com/javase/1.5.0/docs/api/java/net/Socket.html#getInetAddress ().

SSLSocketFactory factory = HttpsURLConnection.getDefaultSSLSocketFactory();

System.out.println("Starting SSL Socket For "+hostname+" port "+port);
SSLSocket socket = (SSLSocket) factory.createSocket(hostname, port);

//To get the IP for the remote host. Format: (domain name/IP), 
//then manually covert it to string

String remoteIP=socket.getInetAddress().toString();
System.out.println("Remote address = " + remoteIP);

socket.startHandshake();     
Certificate[] serverCerts = socket.getSession().getPeerCertificates();
Run Code Online (Sandbox Code Playgroud)

例如,当我运行程序时,主机是:"www.tesco.com",".getInetAddress()".将此IP返回给我:88.221.94.232.当我尝试在浏览器中输入此IP时,即使在向URL添加"https://"之后,它也会向我显示"无效的网址".然而,如果我试图ping"tesco.com",我会得到另一个IP:"212.140.185.177",如果我在浏览器中输入它,它会打开tesco的网页.

我有什么误会?除了getInetAddress和getHostAddress()之外还有其他方法来获取远程主机的IP地址(不使用套接字)吗?

java sockets network-programming network-security

1
推荐指数
1
解决办法
3315
查看次数

Java和数据库中的多线程

我有一个简单的程序.主要的想法是我有一个存储在MySQL数据库中的名称列表,我想同时对这些名称进行一些操作,但当然,每个线程应该以一个单独的名称工作.下一个线程应该对前一个线程采用的下一个名称起作用.我创建了线程池,我在循环中创建新线程,然后执行runnable,以便执行对这些名称的操作.在此示例中,操作是打印从DB中选择的名称.该程序正在从数据库中删除一些名称,并重复使用该名称6次.我的计划有什么问题?我还是新手,请原谅我的错误.

这是主要功能:

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main {

    public static volatile ResultSet resultSet = null;
    private static Statement statement = null;

    public static void main(String[] args) throws SQLException 

    {
        DBConnection.ConnectDB(); //connect to database


          statement = DBConnection.con.createStatement();
          resultSet = statement.executeQuery("select Name from schema.table1"); //select statement

          String name = null;


           // create ExecutorService to manage threads 
          ExecutorService threadExecutor = Executors.newFixedThreadPool(3 );

          // create and name each runnable  
          while(resultSet.next()) 
             {
                 name=resultSet.getString("Name");
                 MyRunnable task1 …
Run Code Online (Sandbox Code Playgroud)

java mysql multithreading

1
推荐指数
1
解决办法
2364
查看次数

import org.apache.commons.httpclient.*

我使用导入以下包的代码:

import org.apache.commons.httpclient.*;
Run Code Online (Sandbox Code Playgroud)

我用eclipse.我去了http://hc.apache.org/downloads.cgi并且我下载了Jar文件,我将它们添加到我的项目中.仍然是日食造成错误.

线程"main"java.lang.Error中的异常:未解决的编译问题:HttpClient无法解析为类型

问题是什么?

java

1
推荐指数
1
解决办法
2万
查看次数

如何将MySQL中的多个列导出到文本文件中

我知道如何将多个列导出到csv文件.使用:

SELECT `col1`, `col2`
FROM table
INTO OUTFILE 'C:/filename.csv'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';
Run Code Online (Sandbox Code Playgroud)

当我使用excel打开文件时,一切都很好,每条记录都在一行中.但是,当我使用记事本打开它时,我发现所有记录都是彼此相邻打印的,没有行分隔符.如何将查询的输出打印为每行一个记录,每列用逗号分隔?

mysql

1
推荐指数
1
解决办法
4292
查看次数