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

📄 ch8.txt

📁 精通Java网络编程代码全部
💻 TXT
字号:
/* 代码8-1
 * Created on 2005-5-22
 */

import java.net.*;
import javax.net.*;
import javax.net.ssl.*;
public class SSLSample {
	static final int HTTPS_PORT = 443;
	public static void main(String args[]) throws IOException {
		String hostname;
		// 若不提供服务器名字,则采用默认的服务器
		if (args.length == 0) {
			hostname = "www.example.com";
		} else {
			hostname = args[0];
		}
		// 构建SocketFactory对象
		SocketFactory factory = SSLSocketFactory.getDefault();
		// 从SocketFactory对象中获得Socket接口
		Socket socket = factory.createSocket(hostname, HTTPS_PORT);
		// 发出连接请求
		OutputStream os = socket.getOutputStream();
		PrintWriter pw = new PrintWriter(os);
		// 设置命令
		String command = "GET / HTTP/1.0\r\n\r\n";
		pw.print(command);
		pw.flush();
		// 获得回应
		InputStream is = socket.getInputStream();
		InputStreamReader isr = new InputStreamReader(is);
		BufferedReader br = new BufferedReader(isr);
		String line;
		while ((line = br.readLine()) != null) {
			System.out.println(line);
		}
		pw.close();
		br.close();
		socket.close();
	}
}

/* 代码8-2
 * Created on 2005-5-22
 */

package ssl;

import java.net.*;
import javax.net.ssl.*;
import java.io.*;
import java.security.*;

public class SSLServer
{
	static int port=8000;  //系统将要监听的端口号
	static SSLServerSocket server;
	/*
	*构造函数
	*/
	public SSLServer()
	{
		
	}
	/**
	*@param port 监听的端口号
	*@return 返回一个SSLServerSocket对象
	*/
	private static SSLServerSocket getServerSocket(int thePort)
	{
		SSLServerSocket s=null;
		try
		{
			String key="SSLKey";  //要使用的证书名
			char keyStorePass[]="12345678".toCharArray();  //证书密码
			char keyPassword[]="12345678".toCharArray();  //证书别称所使用的主要密码
			KeyStore ks=KeyStore.getInstance("JKS");  //创建JKS密钥库
			ks.load(new FileInputStream(key),keyStorePass);
			//创建管理JKS密钥库的X.509密钥管理器
			KeyManagerFactory kmf=KeyManagerFactory.getInstance("SunX509");
			kmf.init(ks,keyPassword);
			SSLContext sslContext=SSLContext.getInstance("SSLv3");
			sslContext.init(kmf.getKeyManagers(),null,null);
			//根据上面配置的SSL上下文来产生SSLServerSocketFactory,与通常的产生方法不同
			SSLServerSocketFactory factory=sslContext.getServerSocketFactory();
			s=(SSLServerSocket)factory.createServerSocket(thePort);
		}catch(Exception e)
		{
			System.out.println(e);
		}
		return(s);
	}
	public static void main(String args[])
	{
		try
		{
			server=getServerSocket(port);
			System.out.println("在”+port+”端口等待连接...");
			while(true)
			{
				SSLSocket socket=(SSLSocket)server.accept();
				//将得到的socket交给CreateThread对象处理,主线程继续监听
				new CreateThread(socket);
			}
		}catch(Exception e)
		{
			System.out.println("main方法错误80:"+e);
		}
	}
}

/*
*内部类,获得主线程的socket连接,生成子线程来处理
*/

class CreateThread extends Thread
{
	static BufferedReader in;
	static PrintWriter out;
	static Socket s;

	/*
	*构造函数,获得socket连接,初始化in和out对象
	*/

	public CreateThread(Socket socket)
	{
		try
		{
			s=socket;
			in=new BufferedReader(new InputStreamReader(s.getInputStream(),"gb2312"));
			out=new PrintWriter(s.getOutputStream(),true);
			start();  //开新线程执行run方法
		}catch(Exception e)
		{
			System.out.println(e);
		}
		
	}
	
	/*
	*线程方法,处理socket传递过来的数据
	*/
	
	public void run()
	{
		try
		{
			String msg=in.readLine();
			System.out.println(msg);
			s.close();
		}catch(Exception e)
		{
			System.out.println(e);
		}
	}

/* 代码8-3
 * Created on 2005-5-22
 */

package  ssl;
import java.net.*;
import javax.net.ssl.*;
import javax.net.*;
import java.io.*;

public class SSLClient
{
	static int port=8266;
	public static void main(String args[])
	{
	try
	{
		SSLSocketFactory factory=(SSLSocketFactory)SSLSocketFactory.getDefault();
		Socket s=factory.createSocket("localhost",port);
		PrintWriter out=new PrintWriter(s.getOutputStream(),true);
		out.println("安全的说你好");
		out.close();
		s.close();
	}catch(Exception e)
	{
		System.out.println(e);
	}
	}
}

/* 代码8-4
 * Created on 2005-5-22
 */

import java.io.*;
import javax.net.ssl.*;


public class Server {
	int port = portNumber;
	SSLServerSocket server;
	try {
		SSLServerSocketFactory factory = 
			(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
		server = (SSLServerSocket) factory.createServerSocket(portNumber);
		SSLSocket client = (SSLSocket) server.accept();
		//创建输入和输出流
		//发送安全信息通过输出流
		//接收安全信息从客户端
	} catch(Exception e) 
	{
	}
}

/* 代码8-5
 * Created on 2005-5-22
 */

import java.io.*;
import javax.net.ssl.*;


public class Client {
	...
		try {
		SSLSocketFactory factory = (SSLSocketFactory)SSLSocketFactory.getDefault();
		server = (SSLServerSocket)factory.createServerSocket(portNumber);
		SSLSocket client = (SSLSOcket)factory.createSocket(serverHost, port);
	} catch(Exception e) {
		
	}
	
}

/* 代码8-6
 * Created on 2005-5-22
 */

import java.io.*;
import java.net.*;
import java.util.StringTokenizer;


/** 
此类开发了多线程的HTTP服务器
*/
public class HttpServer {
//服务器监听的端口
	public static final int HTTP_PORT = 8080;
	public ServerSocket getServer() throws Exception {
		return new ServerSocket(HTTP_PORT);
	}
	
	//创建多线程为每一个请求 
	public void run() {

		ServerSocket listen;
		try {
			
			listen = getServer();
			while(true) {
				Socket client = listen.accept();
				ProcessConnection cc = new ProcessConnection(client);
			}
		} catch(Exception e) {
			System.out.println("Exception:"+e.getMessage());
		}
	}
	// 主程序
	public static void main(String argv[]) throws 
		Exception {
		HttpServer httpserver = new HttpServer();
		httpserver.run();
	}
}

class ProcessConnection extends Thread {
	Socket client;
	BufferedReader is;
	DataOutputStream os;
	public ProcessConnection(Socket s) { // 构造函数
		client = s;
		try {
			is = new BufferedReader(new InputStreamReader(client.getInputStream()));
			os = new DataOutputStream(client.getOutputStream());
		} catch (IOException e) {
			System.out.println("Exception: "+e.getMessage());
		}
		this.start();
		will call run()
	}
	public void run() {
		try {
			//获取请求,并解析请求信息
			String request = is.readLine();
			System.out.println( "Request: "+request );
			StringTokenizer st = new StringTokenizer( request );
			if ( (st.countTokens() >= 2) && 
				st.nextToken().equals("GET") ) {
				if ( (request = 
					st.nextToken()).startsWith("/") )
					request = request.substring( 1 );
				if ( request.equals("") )
					request = request + "index.html";
				File f = new File(request);
				shipDocument(os, f);
			} else {
				os.writeBytes( "400 Bad Request" );
			} 
			client.close();
		} catch (Exception e) {
			System.out.println("Exception: " + 
				e.getMessage());
		} 
	}
	/**
	* 读取请求信息,并发送到浏览器上
	*/
	public static void shipDocument(DataOutputStream out, File f) throws Exception {
		try {
			DataInputStream in = new 
				DataInputStream(new FileInputStream(f));
			int len = (int) f.length();
			byte[] buf = new byte[len];
			in.readFully(buf);
			in.close();
			out.writeBytes("HTTP/1.0 200 OK\r\n");
			out.writeBytes("Content-Length: " + 
				f.length() +"\r\n");
			out.writeBytes("Content-Type: 
				text/html\r\n\r\n");
				out.write(buf);
			out.flush();
		} catch (Exception e) {
			out.writeBytes("<html><head><title>error</title>
				</head><body>\r\n\r\n");
				out.writeBytes("HTTP/1.0 400 " + e.getMessage() + "\r\n");
			out.writeBytes("Content-Type: text/html\r\n\r\n");
			out.writeBytes("</body></html>");
			out.flush();
		} finally {
			out.close();
		}
	}
	
}

/* 代码8-7
 * Created on 2005-5-22
 */

import java.io.*;
import java.net.*;
import javax.net.*;
import javax.net.ssl.*;
import java.security.*;
import java.util.StringTokenizer;


public class HttpsServer {
	String keystore = "serverkeys";
	char keystorepass[] = "hellothere".toCharArray();
	char keypassword[] = "hiagain".toCharArray();
	//用来监听的端口
	public static final int HTTPS_PORT = 443;
	public ServerSocket getServer() throws Exception {
		KeyStore ks = KeyStore.getInstance("JKS");
		ks.load(new FileInputStream(keystore), keystorepass);
		KeyManagerFactory kmf = 
			KeyManagerFactory.getInstance("SunX509");
			kmf.init(ks, keypassword);
		SSLContext sslcontext = 
			SSLContext.getInstance("SSLv3");
		sslcontext.init(kmf.getKeyManagers(), null, null);
		ServerSocketFactory ssf = 
			sslcontext.getServerSocketFactory();
		SSLServerSocket serversocket = (SSLServerSocket) 
			ssf.createServerSocket(HTTPS_PORT);
		return serversocket;
	}
	
	public void run() {
		ServerSocket listen;
		try {
			listen = getServer();
			while(true) {
				Socket client = listen.accept();
				ProcessConnection cc = new 
					ProcessConnection(client);
			}
		} catch(Exception e) {
			System.out.println("Exception: "+e.getMessage());
		}
	}
	//主程序
	public static void main(String argv[]) throws Exception {
		HttpsServer https = new HttpsServer();
		https.run();
	}
}

⌨️ 快捷键说明

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