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

    Socket实现的HTTP响应服务器,看后就很容易理解Web服务器的原理了。
    [java] view plain copy
    1. package test.io;    
    2.     
    3. import java.net.*;    
    4. import java.io.*;    
    5.     
    6. /**  
    7.  * 一个简单的Socket实现的HTTP响应服务器。<br>  
    8.  * 只用于熟悉HTTP协议的目的,可以看到浏览器发过来的数据格式。  
    9.  *   
    10.  * @author  */    
    11. public class MyWebServer {    
    12.   public static void main(String[] args) {    
    13.     Socket socket = null;    
    14.     try {    
    15.       // 创建一个监听8000端口的服务器Socket    
    16.       ServerSocket s = new ServerSocket(80003);    
    17.       System.out.println("MyWebServer等待来自浏览器的连接 ");    
    18.       while (true) {    
    19.         socket = s.accept();    
    20.         System.out.println("连接已建立。端口号:" + socket.getPort());    
    21.         new MyWebServerThread(socket).start();    
    22.       }    
    23.     } catch (IOException e) {    
    24.       e.printStackTrace();    
    25.     }    
    26.   }    
    27. }    
    28.     
    29. class MyWebServerThread extends Thread {    
    30.   private Socket socket;    
    31.     
    32.   MyWebServerThread(Socket socket) {    
    33.     this.socket = socket;    
    34.   }    
    35.     
    36.   @Override    
    37.   public void run() {    
    38.     try {    
    39.       InputStreamReader is = new InputStreamReader(socket.getInputStream());    
    40.       char[] bs = new char[2048];    
    41.       PrintStream out;    
    42.       out = new PrintStream(socket.getOutputStream());    
    43.       StringBuilder msg = new StringBuilder();    
    44.       // 如果10毫秒还没有数据,则视同没有新的数据了。    
    45.       // 因为有Keep-Alive的缘故,浏览器可能不主动断开连接的。    
    46.       // 实际应用,会根据协议第一行是GET还是 POST确定。    
    47.       socket.setSoTimeout(10);    
    48.       //    
    49.       // 此处读入请求数据并做相应的处理    
    50.       //    
    51.       int len = -1;    
    52.       try {    
    53.         while ((len = is.read(bs)) != -1) {    
    54.           msg.append(bs, 0, len);    
    55.           msg.append(" ");    
    56.         }    
    57.       } catch (Exception ex) {    
    58.         // ex.printStackTrace();    
    59.       }    
    60.       // 下面是由服务器直接生成的主页内容    
    61.       // 1、首先向浏览器输出响应头信息    
    62.       out.println("HTTP/1.1 200 OK");    
    63.       out.println("Content-Type:text/html;charset:GBK");    
    64.       out.println();    
    65.       // 2、输出主页信息    
    66.       out    
    67.           .println("<html><body><center><h1>http协议测试服务器,当前时间:" + new java.util.Date()+"</h1></center></body></html>");    
    68.       out.flush();    
    69.       out.close();    
    70.       is.close();    
    71.       System.out.println("close");    
    72.       // 关闭连接    
    73.       socket.close();    
    74.     } catch (IOException e) {    
    75.       e.printStackTrace();    
    76.     }    
    77.   }    
    78. }    
  • 相关阅读:
    ionic -v2版本项目结构
    Ionic -v1初始项目结构
    Ionic创建混合App(一)
    basename函数不能获取url路径中文文件名的问题
    TP框架中的A方法和R方法
    TP框架中的M、D、C、I、A、S方法
    TP中如何去掉index.php
    利用vsftpd在Linux构建安全的FTP服务
    linux上使用netstat查看当前服务和监听端口
    juniper防火墙清空配置恢复出厂设置命令
  • 原文地址:https://www.cnblogs.com/thewindkee/p/12873201.html
Copyright © 2011-2022 走看看