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

📄 sslserver.java

📁 java Applet
💻 JAVA
字号:
import java.io.*;
import java.net.*;
import java.security.*;
import java.sql.Connection;

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 sslserver {

	/**
	 * @param args
	 */
	private static final String HOST="172.16.28.28";
	private static final int PORT=5000;
	//初始化KeyManagers对象数组;
	private static KeyManager[] getKeyManagers()throws IOException, 
	GeneralSecurityException
	{
		KeyStore ks=null;
		KeyManagerFactory kmf=null;//KeyManager的主要职责就是选择最终会被发送给远程主机的认证凭证;
		KeyManager[] keyManagers=null;
		FileInputStream fis=null;


		try{
			fis=new FileInputStream("serverKeys"); 
			char[] passphrase="passwords".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 static TrustManager[] getTrustManagers()throws IOException, 
	GeneralSecurityException
	{
		
		KeyStore ks=null;
		TrustManagerFactory tmf=null;
		TrustManager[] trustManagers=null;//TrustManager的主要职责就是判断当前的认证凭证是否可信;
		FileInputStream fis=null;
		try{
			fis=new FileInputStream("serverTrust");
			//fis=new FileInputStream("serverKeys");
			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 static void main(String[] args) {
		// TODO Auto-generated method stub
		//首先定义一些变量;
		SSLContext context=null;
		KeyManager[] keyManagers=null;
		TrustManager[] trustManagers=null;
		
		ServerSocket ss=null;		
		SSLServerSocketFactory ssf=null;	
		Socket s=null;
		Server_thread thread;
		
		try{
			
			keyManagers=getKeyManagers();
			trustManagers=getTrustManagers();
			
			context=SSLContext.getInstance("TLS");
			//keyManagers=keyManagers.getKeyManagers();
			context.init(keyManagers, trustManagers, null);
			
			ssf=context.getServerSocketFactory();
			//得到一个套结字,并创造输入输出流;
			ss=ssf.createServerSocket(PORT);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		while(true)
		{
			try{
								
				s=ss.accept();
				System.out.println("客户端的地址"+s.getInetAddress());
				
			} catch (Exception e) {
				e.printStackTrace();
			}
//			为每个客户启动一个专门的线程;
			if(s!=null)
			{
				thread=new Server_thread(s);
				//启动线程,执行run();
				thread.start();
			}
			else
			{
				continue;
			}
			
			
		}
		
	}

}
//线程类;
class Server_thread extends Thread
{
	Socket socket;
	Connection Con=null;
	DataOutputStream out=null;
	DataInputStream  in=null;
	int n=0;
	String str=null;
	
	Server_thread(Socket t)
	{ socket =t;
		try
		{	//读取传递数据的数据流对象;
			//融合send(),recv();
			//in 指向socket指定的输入流,从socket中按照与机器无关的风格读取;
			in=new DataInputStream(socket.getInputStream());
			out=new DataOutputStream(socket.getOutputStream());
		}
		catch(IOException e)
		{}
	}
	public void run()
	{
		while(true)
		{
			try
			{
				str=in.readUTF();
				out.writeUTF(str);
				System.out.println("服务端收到信息为:"+str);
				sleep(3);
			}
			catch(InterruptedException e)
			{}
			catch(IOException e)
			{
				System.out.println("客户离开");
				break;
			}
		}
	}
}

⌨️ 快捷键说明

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