📄 httpserverthread.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 + -