zoukankan      html  css  js  c++  java
  • JAVA编写的一个简单的Socket实现的HTTP响应服务器

    JAVA编写的一个简单的Socket实现的HTTP响应服务器,看后就很容易理解Web服务器的原理了。

    package test.io;
    
    import java.net.*;
    import java.io.*;
    
    /**
     * 一个简单的Socket实现的HTTP响应服务器。<br>
     * 只用于熟悉HTTP协议的目的,可以看到浏览器发过来的数据格式。
     * 
     * @author  */
    public class MyWebServer {
      public static void main(String[] args) {
        Socket socket = null;
        try {
          // 创建一个监听8000端口的服务器Socket
          ServerSocket s = new ServerSocket(8000, 3);
          System.out.println("MyWebServer等待来自浏览器的连接
    ");
          while (true) {
            socket = s.accept();
            System.out.println("连接已建立。端口号:" + socket.getPort());
            new MyWebServerThread(socket).start();
          }
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
    
    class MyWebServerThread extends Thread {
      private Socket socket;
    
      MyWebServerThread(Socket socket) {
        this.socket = socket;
      }
    
      @Override
      public void run() {
        try {
          InputStreamReader is = new InputStreamReader(socket.getInputStream());
          char[] bs = new char[2048];
          PrintStream out;
          out = new PrintStream(socket.getOutputStream());
          StringBuilder msg = new StringBuilder();
          // 如果10毫秒还没有数据,则视同没有新的数据了。
          // 因为有Keep-Alive的缘故,浏览器可能不主动断开连接的。
          // 实际应用,会根据协议第一行是GET还是 POST确定。
          socket.setSoTimeout(10);
          //
          // 此处读入请求数据并做相应的处理
          //
          int len = -1;
          try {
            while ((len = is.read(bs)) != -1) {
              msg.append(bs, 0, len);
              msg.append("
    ");
            }
          } catch (Exception ex) {
            // ex.printStackTrace();
          }
          // 下面是由服务器直接生成的主页内容
          // 1、首先向浏览器输出响应头信息
          out.println("HTTP/1.1 200 OK");
          out.println("Content-Type:text/html;charset:GBK");
          out.println();
          // 2、输出主页信息
          out
              .println("<HTML><BODY>"
                  + "<center>"
                  + "<H1>HTTP协议测试服务器,当前时间:"
                  + new java.util.Date()
                  + "</h1>"
                  + "<form method='get'>username:<input type='text' name='username'/>password:<input type='text' name='password'/><input type='submit' value='GET测试'/></form><br/>"
                  + "<form method='post'>username:<input type='text' name='username'/>password:<input type='text' name='password'/><input type='submit' value='POST测试'/></form><br/>"
                  + "<form method='post'  enctype='multipart/form-data'>phototitle:<input type='text' name='phototitle'/>photo:<input type='file' name='photo'/><input type='submit' value='Upload测试'/></form>"
                  + "</center>您提交的数据如下:<pre>" + msg.toString() + "</pre></BODY></HTML>");
          out.flush();
          out.close();
          is.close();
          System.out.println("close");
          // 关闭连接
          socket.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }


  • 相关阅读:
    jmeter接口测试----10从文件中读取
    How to let a html with JavaScript can display in Outlook?
    [Jenkins] 将上游Job的参数传递给多个下游Job
    Jenkins Job之间传递参数
    一个Jenkins job里面配置多个批处理脚本,如果其中某一个有fail的,其后面的批处理脚本全都不执行了
    JMeter supports dashboard report generation to get graphs and statistics from a test plan
    分享几个实用的批处理脚本
    Job构建步骤间的自定义变量传递
    Download file from a URL using AutoIt, and run in Robot Framework. (Also can use in other application)
    [Selenium] Upload File on Remote Node Machines
  • 原文地址:https://www.cnblogs.com/leixiaohua1020/p/3902167.html
Copyright © 2011-2022 走看看