Socket多线程调用文件(静态网页)

   1:   
   2:  package com.cnpler;
   3:   
   4:  import java.io.BufferedReader;
   5:  import java.io.File;
   6:  import java.io.FileInputStream;
   7:  import java.io.FileNotFoundException;
   8:  import java.io.IOException;
   9:  import java.io.InputStream;
  10:  import java.io.InputStreamReader;
  11:  import java.io.PrintStream;
  12:  import java.net.Socket;
  13:   
  14:  public class Processor
  15:  {
  16:      private Socket sktSocket;
  17:      private InputStream in;
  18:      private PrintStream out;
  19:      // 指定目录
  20:      public final static String Web_Root = "E:\\Users\\cnpler\\Workspaces\\MyEclipse 10";
  21:      
  22:      public Processor(Socket socket)
  23:      {
  24:          this.sktSocket = socket;
  25:          try
  26:          {
  27:              in = socket.getInputStream();
  28:              out = new PrintStream(socket.getOutputStream());
  29:          }
  30:          catch (IOException e)
  31:          {
  32:              e.printStackTrace();
  33:          }
  34:      }
  35:      
  36:      public void run()
  37:      {
  38:          String filename = parse(in);
  39:          SendFile(filename);
  40:      }
  41:      
  42:      public String parse(InputStream in)
  43:      {
  44:          BufferedReader br = new BufferedReader(new InputStreamReader(in));
  45:          String filename = null;
  46:          try
  47:          {
  48:              String httpMessage = br.readLine();
  49:              String[] content = httpMessage.split(" ");
  50:              if (content.length != 3)
  51:              {
  52:                  SendErrorMessage(400, "Client query error!");
  53:              }
  54:              System.out.println("Code:" + content[0] + ",filename:" + content[1] + ",http version:" + content[2]);
  55:              filename = content[1];
  56:          }
  57:          catch (IOException e)
  58:          {
  59:              e.printStackTrace();
  60:          }
  61:          return filename;
  62:      }
  63:      
  64:      public void SendErrorMessage(int errorCode, String errorMessagge)
  65:      {
  66:          out.println("HTTP/1.0 " + errorCode + " " + errorCode);
  67:          out.println("content_type: text/html");
  68:          out.println("");
  69:          out.println("<html>");
  70:          out.println("<title>Error Message");
  71:          out.println("/<title>");
  72:          out.println("body");
  73:          out.println("<h1>ErrorCode:" + errorCode + ",Message:" + errorMessagge + "</h1>");
  74:          out.println("/body");
  75:          out.println("<html>");
  76:          out.flush();
  77:          out.close();
  78:          try
  79:          {
  80:              in.close();
  81:          }
  82:          catch (IOException e)
  83:          {
  84:              e.printStackTrace();
  85:          }
  86:      }
  87:      
  88:      public void SendFile(String filename)
  89:      {
  90:          File file = new File(Processor.Web_Root + filename);
  91:          if (!file.exists())
  92:          {
  93:              SendErrorMessage(404, "File Not Found!");
  94:              return;
  95:          };
  96:          
  97:          try
  98:          {
  99:              InputStream in = new FileInputStream(file);
 100:              byte content[] = new byte[(int) file.length()];
 101:              in.read(content);
 102:              out.println("HTTP/1.0 200 queryfile");
 103:              out.println("content_length:" + content.length);
 104:              out.println("");
 105:              out.write(content);
 106:              out.flush();
 107:              out.close();
 108:              in.close();
 109:          }
 110:          catch (FileNotFoundException e)
 111:          {
 112:              e.printStackTrace();
 113:          }
 114:          catch (IOException e)
 115:          {
 116:              e.printStackTrace();
 117:          };
 118:      }
 119:  }

posted on 2012-03-19 02:20  向北™  阅读(254)  评论(0编辑  收藏  举报

导航