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

📄 httpserverthread.java

📁 《Java TCP/IP应用开发详解》的部分源程序,开发环境为ECLIPSE3.1
💻 JAVA
字号:
package section18;

import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;


public class HTTPServerThread extends Thread {
    
	Socket client;
	public HTTPServerThread(Socket client) {
		this.client=client;
	}

	public void run()
	{
		try
		{
			describeConnectionInfo(client);
			BufferedOutputStream outStream=new BufferedOutputStream(client.getOutputStream());
			HTTPInputStream inStream=new HTTPInputStream(client.getInputStream());
		    HTTPRequest request=inStream.getRequest();
		    request.log();
		    if(request.isGetRequest())
		    	processGetRequest(request,outStream);
		    System.out.println("Request completed.Closing connection");
		    client.close();
		    
		}catch(IOException e)
		{
			System.out.println("IOException occurred.");
			e.printStackTrace();
		}
	}
	
	void describeConnectionInfo(Socket client)
	{
		String destName=client.getInetAddress().getHostName();
		String destAddr=client.getInetAddress().getHostAddress();
        int destPort=client.getPort();
        System.out.println("Accepted connection to "+destName+"("+destAddr+")"+" on port "+destPort+".");
        
	}
    
	
	void processGetRequest(HTTPRequest request,BufferedOutputStream outStream)throws IOException
	{
		String fileName=request.getFileName();
		File file=new File(fileName);
		if(file.exists())sendFile(outStream,file);
		else
			System.out.println("File "+file.getCanonicalPath()+" doesn't exist.");
	}
	
	
	void sendFile(BufferedOutputStream out,File file)
	{
		try{
			DataInputStream in=new DataInputStream(new FileInputStream(file));
			int len=(int)file.length();
			byte buffer[]=new byte[len];
			in.readFully(buffer);
			in.close();
			out.write("HTTP/1.0 200 OK\r\n".getBytes());
			out.write(("Content-Length: "+buffer.length+"\r\n").getBytes());
			out.write("Content-Type: text/HTML\r\n\r\n ".getBytes());
			out.write(buffer);
			out.flush();
			out.close();
			System.out.println("Number of bytes:"+len);
			System.out.println("Number of bytes: "+len);
		}catch(Exception e)
		{
			try{
				out.write(("HTTP/1.0 400 "+"No can do"+"\r\n").getBytes());
				out.write(("Content type: text/HTML\r\n\r\n ".getBytes()));
			}catch(IOException ioe)
			{
				System.out.println("Error retrieving "+file);
			}
		}
	}
	
   


}

⌨️ 快捷键说明

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