package org.liujl.http;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class HTTPServer {
public static void main(String [] args){
int port = 7080;
ServerSocket serverSocket;
try {
serverSocket = new ServerSocket(port);
System.out.println("服务器正在监听端口:" + port);
while(true){
try{
final Socket socket = serverSocket.accept();
System.out.println("与客户端建立链接: " + socket.getInetAddress()+ ":" + socket.getPort());
service(socket);
}catch(Exception e){
e.printStackTrace();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void service(Socket socket) throws Exception{
InputStream socketIn = socket.getInputStream();
Thread.sleep(500);
int size = socketIn.available();
byte [] buffer = new byte[size];
socketIn.read(buffer);
String request = new String(buffer);
System.out.println(request);
String firstLineOfRequest = request.substring(0,request.indexOf("/r/n"));
String [] parts = firstLineOfRequest.split(" ");
String uri = parts[1];
String contentType;
if(uri.indexOf("html") != -1 || uri.indexOf("htm") != -1 || uri.indexOf("txt") != -1){
contentType = "text/html";
}else if(uri.indexOf("jpg") != -1 || uri.indexOf("jpeg") != -1){
contentType = "image/jpeg";
}else if(uri.indexOf("gif") != -1){
contentType = "image/gif";
}else{
contentType = "application/octet-stream";
}
String responseFirstLine = "HTTP/1.1 200 OK/r/n";
String responseHeader = "Content-Type:"+contentType+"/r/n/r/n";
OutputStream socketOut = socket.getOutputStream();
socketOut.write(responseFirstLine.getBytes());
socketOut.write(responseHeader.getBytes());
int len = 0;
buffer = new byte[128];
//InputStream in = new FileInputStream("d:/temp/testdata.txt");
String localPath = uri.substring(1);
InputStream in = HTTPServer.class.getResourceAsStream(localPath);
while((len=in.read(buffer)) != -1){
System.out.println(buffer);
socketOut.write(buffer,0,len);
}
Thread.sleep(1000);
socket.close();
}
}
说明: 运行该程序,如果在和该类相同的路径存在index.html的话,则请求 http://127.0.0.1:7080/index.html 则可以获得该文件的内容,并且显示在页面上。呵呵。