JAVA编写的一个简单的Socket实现的HTTP响应服务器
JAVA编写的一个简单的Socket实现的HTTP响应服务器
雷霄骅 发表于4年前
JAVA编写的一个简单的Socket实现的HTTP响应服务器
  • 发表于 4年前
  • 阅读 134
  • 收藏 2
  • 点赞 1
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

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等待来自浏览器的连接\n");
      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("\n");
        }
      } 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();
    }
  }
}

 

共有 人打赏支持
粉丝 190
博文 419
码字总数 2129
作品 4
×
雷霄骅
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: