我从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握手不会成功的最短时间.
我从一个函数中获取以下代码,该函数将主机名作为输入,并且应该为该主机提取证书.我需要显示远程主机的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地址(不使用套接字)吗?
我有一个简单的程序.主要的想法是我有一个存储在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) 我使用导入以下包的代码:
import org.apache.commons.httpclient.*;
Run Code Online (Sandbox Code Playgroud)
我用eclipse.我去了http://hc.apache.org/downloads.cgi并且我下载了Jar文件,我将它们添加到我的项目中.仍然是日食造成错误.
线程"main"java.lang.Error中的异常:未解决的编译问题:HttpClient无法解析为类型
问题是什么?
我知道如何将多个列导出到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打开文件时,一切都很好,每条记录都在一行中.但是,当我使用记事本打开它时,我发现所有记录都是彼此相邻打印的,没有行分隔符.如何将查询的输出打印为每行一个记录,每列用逗号分隔?