深入理解HTTP协议的一个java的例子

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 则可以获得该文件的内容,并且显示在页面上。呵呵。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

如意唐伯虎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值