我正在通过以下IP地址进行套接字通信,但是我不想在ssl模式下进行通信但是如何更改InetAddress serverAddr = InetAddress.getByName("192.168.1.2");为SSL.
public class TCPClient implements Runnable {
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName("192.168.1.2");
Log.d("TCP", "C: Connecting...");
Socket socket = new Socket(serverAddr,12345);
String message = "Hello from Client android emulator";
try {
Log.d("TCP", "C: Sending: '" + message + "'");
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
out.println(message);
Log.d("TCP", "C: Sent.");
Log.d("TCP", "C: Done.");
} catch(Exception e) {
Log.e("TCP", "S: Error", e);
} finally {
socket.close();
}
} catch (Exception e) {
Log.e("TCP", "C: Error", e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
zac*_*usz 19
创建SSLSocket而不是Socket.休息是一样的.
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("192.168.1.2", 12345);
Run Code Online (Sandbox Code Playgroud)
您可能希望添加aditional SSL属性.你必须做得更早:
要对服务器进行身份验证,客户端的信任存储区必须包含服务器的证书.具有服务器身份验证的客户端SSL由URL属性ssl或设置为peerAuthentication的属性ssl启用.另外,需要设置系统属性javax.net.ssl.trustStore和javax.net.ssl.trustStorePassword:
System.setProperty("javax.net.ssl.trustStore","clientTrustStore.key");
System.setProperty("javax.net.ssl.trustStorePassword","qwerty");
Run Code Online (Sandbox Code Playgroud)
如果服务器进行客户端身份验证,则客户端将需要密钥对和客户端证书:
System.setProperty("javax.net.ssl.keyStore","clientKeyStore.key");
System.setProperty("javax.net.ssl.keyStorePassword","qwerty");
Run Code Online (Sandbox Code Playgroud)
Java 有 SSLSocket 类。
http://download.oracle.com/javase/1.4.2/docs/api/javax/net/ssl/SSLSocket.html
希望这有帮助,我自己还没有使用过。
| 归档时间: |
|
| 查看次数: |
15565 次 |
| 最近记录: |