⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sslclientapplet.java

📁 java Applet
💻 JAVA
字号:

import java.net.*;import java.io.*;
import java.awt.*;import java.awt.event.*;
import java.applet.*;

import java.security.*;

import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.*;

import com.sun.net.ssl.SSLContext;
import com.sun.net.ssl.KeyManager;
import com.sun.net.ssl.KeyManagerFactory;
import com.sun.net.ssl.TrustManager;
import com.sun.net.ssl.TrustManagerFactory;
public class sslclientapplet extends Applet implements Runnable,ActionListener 
{
	Button send;
	TextField sendtext,recevetext;
	SSLSocket socket=null;
	DataOutputStream out=null;
	DataInputStream  in=null;
	Thread thread;
	private static final String HOST="172.16.28.28";
	private static final int PORT=5000;
	//	初始化KeyManagers对象数组;
	private KeyManager[] getKeyManagers()throws IOException, 
	GeneralSecurityException
	{
		KeyStore ks=null;
		KeyManagerFactory kmf=null;//KeyManager的主要职责就是选择最终会被发送给远程主机的认证凭证;
		KeyManager[] keyManagers=null;
		FileInputStream fis=null;


		try{
			fis=new FileInputStream("F:/clientcert/clientKeys"); 
			char[] passphrase="passwordc".toCharArray();//serverkeys证书密码;
			ks=KeyStore.getInstance("JKS");
			ks.load(fis, passphrase);//加载serverkeys密码;	
			kmf=KeyManagerFactory.getInstance("SunX509");
			kmf.init(ks,passphrase);
			
			keyManagers=kmf.getKeyManagers();
			fis.close();
			return keyManagers;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		
	}
	//初始化TrustManager对象数组;
	private  TrustManager[] getTrustManagers()throws IOException, 
	GeneralSecurityException
	{
		
		KeyStore ks=null;
		TrustManagerFactory tmf=null;
		TrustManager[] trustManagers=null;//TrustManager的主要职责就是判断当前的认证凭证是否可信;
		FileInputStream fis=null;
		try{
			fis=new FileInputStream("F:/clientcert/clientTrust");
			char[] passphrase="passwords".toCharArray();//serverkeys证书密码;
			ks=KeyStore.getInstance("JKS");
			ks.load(fis,passphrase);
			tmf=TrustManagerFactory.getInstance("SunX509");
			tmf.init(ks);
			
			trustManagers= tmf.getTrustManagers();
			fis.close();
			return trustManagers;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		
	}
	public void init()
	{   //布设页面的控件;
		setLayout(new GridLayout(2,2));
		Panel p1=new Panel();
		Panel p2=new Panel();
		send=new Button("发送");
		sendtext=new TextField(20);
		recevetext=new TextField(20); 
		p1.add(new Label("输入信息:"));
		p1.add(sendtext);
		p2.add(new Label("server 返回信息"));
		p2.add(recevetext);
		p2.add(send);
		send.addActionListener(this);
		add(p1);
		add(p2);
	}
	public void start()
	{		//建立好各种对象;
		//	首先设置上下文环境;
		SSLContext context=null;
		KeyManager[] keyManagers=null;
		TrustManager[] trustManagers=null;

		SSLSocketFactory sf=null;		
		SSLSocket s=null;
		Thread thread=null;
		
		try{		
			keyManagers=getKeyManagers();
			trustManagers=getTrustManagers();
			
			context=SSLContext.getInstance("TLS");
			//keyManagers=keyManagers.getKeyManagers();
			context.init(keyManagers, trustManagers, null);
		
			sf=context.getSocketFactory();
			//得到一个套结字,并创造输入输出流;
			socket=(SSLSocket)sf.createSocket(HOST,PORT);
			socket.startHandshake();
			//OutputStream out=s.getOutputStream();
			out=new DataOutputStream(socket.getOutputStream());
			in=new DataInputStream(socket.getInputStream());
			//out.writeUTF("hello server");
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		if(socket!=null)
		{
			if(thread ==null)
			{	//启动线程,以接口的形式实行;
				thread=new Thread(this);
				thread.start();
			}
		}	
		
	}
	public void run()
	{
		String s=null;
		while(true)
		{
			try
			{
				s=in.readUTF();
				System.out.println("客户端收到信息为:"+s);
				recevetext.setText(s);
			}
			catch(IOException e)
			{
				//recevetext.setText("与服务器断开!");
				break;
			}
		}
	}
	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource()==send)
		{
			String s=sendtext.getText();
			if(s!=null)
			{
				try
				{
					out.writeUTF(s);
				}
				catch(IOException e1)
				{}
			}
		}
	}
	public void paint(Graphics g)
	{
		//System.out.println("服务器端未启动!");
		g.drawString("服务器端未启动!", 200, 200);
		repaint();
	}
	



}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -