我目前正在爲Android這個學期的一個小個人項目工作。我要做的就是用我的Android手機與我的https服務器建立很多連接,以便服務器關閉。我對編程一無所知,因爲我正在學習網絡而不是計算機語言。但我不知何故從這裏一塊一塊地收集起來,並做出如下的代碼。我認爲它使用套接字連接。Java多個SSL客戶端到一臺服務器
import java.net.*;
import java.io.*;
import java.security.*;
import javax.net.ssl.*;
public class HTTPSClient {
public static void main(String[] args) {
System.out.println("Usage: java HTTPSClient host");
int port = 443; // default https port
String host = "192.168.0.8";
TrustManager[] trustAll = new javax.net.ssl.TrustManager[]{
new javax.net.ssl.X509TrustManager(){
public java.security.cert.X509Certificate[] getAcceptedIssuers(){
return null;
}
public void checkClientTrusted(java.security.cert.X509Certificate[] certs,String authType){}
public void checkServerTrusted(java.security.cert.X509Certificate[] certs,String authType){}
}
};
try {
javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");
sc.init(null, trustAll, new java.security.SecureRandom());
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
SSLSocketFactory factory = (SSLSocketFactory) sc.getSocketFactory();
SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
Writer out = new OutputStreamWriter(socket.getOutputStream());
out.write("GET/HTTP/1.0\\r\\n");
out.write("\\r\\n");
out.flush();
// read response
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
int c;
while ((c = in.read()) != -1) {
System.out.write(c);
}
// out.close();
// in.close();
// socket.close();
} catch (Exception e) {
System.err.println(e);
}
}
}
我在我的macbook上啓用了https,我可以看到端口443正在偵聽。當我執行上面的代碼時,我可以看到一個通過'netstat -an |建立的連接grep 443'直到我停止它。我的問題是:如果我想與此代碼建立多重連接,我應該添加什麼?這個代碼有可能嗎?我的想法是,如果我可以在我的macbook上看到已建立連接到443端口的堆,我將無法將https :: // localhost與瀏覽器連接起來,因爲機器已關閉。我不知道這是否正確,但我希望。因爲這學期已經快結束了,我無論如何都不得不做出報道。
我不確定當我爲Android手機制作代碼時該代碼是否會相同,但我只想先看到發生的事情。我真的很絕望,請幫助我。非常感謝你。
感謝斯科特,但是當我輸入'netstat -an | grep 443'在終端上,我仍然只能看到一個已建立的連接。沒有其他辦法填滿桌子嗎?再次感謝。 – user2430608
反斜槓太多。應該是單身而不是雙。 – EJP