简单web服务器搭建源码

go语言 通过http包搭建简单web服务器 对http包源码的略微分析 go语言中http包实现web服务器功能的源码的略微分析 阅读详情

此源码将运行在服务器端,使用serverSocket类对端口和Ip地址进行监听(监听模式是使用死循环在进行监听),当接收到客户端对监听IP和端口进行访问时,会进入到HttpServer类中对客户端请求进行解析,使用request来对请求流中的url读取出来,使用response类将请求目标文件读取到响应流中,响应给客户端!将对/SHUTDOWN访问时退出监听循环。

客户端访问时例子:http://localhost:8080/index.html

服务器类

package com.util;

import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class HttpServer {
 //文件所方路径信息
 public static final String WEB_ROOT=System.getProperty("user.dir")+File.separator+"webroot";
 public static final String SHUTDOWN_COMMAND="/SHUTDOWN";  
private boolean shutdown= false;  
public void await()
{   
  //在服务端创建连接访问监听   
  ServerSocket serverSocket=null;   
  //监听端口8080   
  int port=8080;  
   try{    //实时监听   
     serverSocket = new ServerSocket(port,1,InetAddress.getByName("127.0.0.1"));
    }catch(Exception e){   
     System.exit(1);    e.printStackTrace();  
   }   
  //在为将监听关闭的情况下进程将进入死循环中   
  while(!shutdown){   
     Socket socket = null;      
    InputStream input = null;      
    OutputStream output=null;     
    try{        
    //当获得客户端8080端口访问后可以根据服务器套接类的accept方法获得与客户端通信的 套接类      
     socket = serverSocket.accept();        
    //获得客户端的请求数据      
     input = socket.getInputStream();      
     //获得套接类的输出流        
    output = socket.getOutputStream();      
     //读取客户端请求的请求数据读出      
     Request request= new Request(input);      
     //读取客户端请求数据的url访问地址        
    request.parse();        
    //对客户端响应数据进行封装     
      Response response = new Response(output);    
      //将解析好的请求数据赋值给响应数据      
     response.setRequest(request);        
    //将相应数据写入到输出流中      
     response.sendStaticResource();      
     //套接类关闭      
     socket.close();        
    //当访问地址为/SHUTDOWN将监听关闭      
     shutdown = request.getUri().equals(SHUTDOWN_COMMAND);    
       }catch(Exception e){      
       e.printStackTrace();      
       continue;    
       }   }  }  
      //启动监听
     public static void main(String[]args){   HttpServer httpserver = new HttpServer();   httpserver.await();  }

}

客户端请求解析类

package com.util;

import java.io.InputStream;

public class Request {
 //客户端请求的输入流  
private InputStream input;
 //读取客户端请求的url地址
 private String uri;  
public Request(InputStream input){   this.input=input;  }
 //解析客户端请求的输入流
 public void parse(){  
 StringBuffer request = new StringBuffer(2048);
  int i;
  byte[] buffer = new byte[2048];
  try{
   i =input.read(buffer);
  }catch(Exception e){   
 e.printStackTrace();    i=-1;  
 }   
for(int j=0;j<i;j++){  
  request.append((char)buffer[j]);   
}  
 System.out.println(request.toString());   
uri = parseUri(request.toString());  
}  //将请求输入流中的url读出
 private String parseUri(String requestString){  
 int index1,index2;  
 index1 = requestString.indexOf(" ");
  if(index1!=-1){   
 index2 = requestString.indexOf(" ",index1+1);  
  if(index2>index1){   
  return requestString.substring(index1+1,index2);   
 }  
 }  
 return null;
 }
 public String getUri(){   return uri;  }

}

客户端响应封装类

package com.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

public class Response {  
private static final int BUFFER_SIZE =1024;
 //获得套接类的响应流信息  
OutputStream output;  
//解析好的请求流信息
 Request request;
 public Response(OutputStream output){  
 this.output = output;  
}  
public void setRequest(Request request){
  this.request=request;
 }
 //根据请求流解析的URL信息找到相应的文件 读取文件内容到响应流中 响应给客户端  
public void sendStaticResource() throws IOException{
  byte[] bytes = new byte[BUFFER_SIZE];   
FileInputStream fis = null;  
 try{   
 //获得文件内容
   File file = new File(HttpServer.WEB_ROOT,request.getUri());    
//如果文件存在并读取到内容时 将文件内容写入到客户端响应流中   
 if(file.exists()){    
 fis = new FileInputStream(file);  
   int ch = fis.read(bytes,0,BUFFER_SIZE);     
while(ch!=-1){     
 output.write(bytes,0,ch);   
   ch = fis.read(bytes,0,BUFFER_SIZE);  
   }    
//如果不存在时将错误信息显示给客户端相应流中    
}else{     
String errorMessage="HTTP/1.1 404 File not Found\\r\\n Content-Type:text/html \\r\\n Content-Length:23\\r\\n <h1>File not Found</h1>";           output.write(errorMessage.getBytes());   
 }  
 }catch(Exception e){  
  e.printStackTrace();  
 //关闭连接  
 }finally{  
  if(fis!=null){     fis.close();    }   
}   
 }

}

Mongoose源码分析之--简单的服务器搭建(C语言) 由于在IOS终端设备上播放实时的TS流,要使用MPMoviePlayerController控件,必须采用Http请求的形式去请求数据,而TS流的来源是通过HTTP请求拿到的,需要再把这个拿到的TS流发送给IOS播放器,所以试图自己搭建一个HTTP服务器,为此学习了Mongoose的源码,这是一个非常轻便,易用,且性能稳定的一套Web服务器源码,总代码不到五千行,在我看来是学习HTTP服务器搭建的一 阅读详情

相关推荐

TensorBoard源码实现探究

学过一些python网络编程的知识,对socket编程,https协议,以及web框架(flask)有一定的了解,所以想探究一下,TensorFlow的可视化工具TensorBoard是怎么搭建web服务的。 查看TensorBoard源码,从两个源码文件入手,分别是: program.py 这里就是设置了一些开始web服务的参数,例如端口(port):6006等 http_util.p...

Never-Giveup的博客 1984

golang 建立web服务器 http包源码详解

golang 建立web服务器 http包源码详解首先,熟悉http协议的都知道,http协议是基于TCP实现的。http服务器的工作方式大概就是监听socket端口,接受连接,获取到请求,处理请求,返回响应。所以,对应的会有几个部分 Request:用户请求的信息。post、get、url等这些信息 Response: 返回给客户端的信息 Conn: 用户每次的连接请求 Handler:处理

一个热爱编程的少年 4520

50行代码教你用python搭建简易服务器!(含分析与实现)

前言: 今天为大家带来的内容是50行代码教你用python搭建简易服务器!(含分析与实现),文章具有不错的参考意义,希望大家会喜欢!(部分代码有图片方式展现出来,方便各位观看及收藏) 需求分析: 用户数 已经破了6000,原有的静态报表 已经变得臃肿不堪 每次打开都要缓上半天,甚至浏览器直接挂掉 ,采用python搭建一个最最简易的 web 服务 请求一个nick ,就返回 对应的...

weixin_41334453的博客 1185

基于Apache搭建Web服务器详解

在Internet网络环境中,Web服务无疑是最为流行的应用系统。有了Web站点,企业可以充分的展示自己的产品,宣传企业形象。Web站点还为企业提供了与客户交流,电子商务交易平台等丰富的网络应用,部署与维护Web服务是运维工程师必须掌握的一个技能。 Windows搭建Web服务可以参考博文:Windows server 2016 搭建IIS(web)服务 如果想要在Centos 7 利用Apach...

小健健的博客 1542

在Linux系统里使用Apache搭建Web网站服务器

使用Apache搭建Web网站服务器 Apache服务 Apache被研发于1995年,是纯开源软件。用于HTTP协议提供web浏览服务,可在Unix、Linux、Windows上运行。 1、配置静态IP vim /etc/sysconfig/network-scripts/ifcfg-ens33 2、关闭防火墙或者安全模块 systemctl disable firewalld #永久关闭防火墙 systemctl stop firewalld #暂时关闭防火墙,重启虚拟机时防火墙会重新开启 syst

weixin_51220765的博客 9022

使用Linux搭建web服务器

对于一个网站开发者而言,在经历了艰难的开发过程后,要将网站推向给用户,必须要做的一步便是部署我们的web应用,这样广大的用户才能成功访问我们的网站。目前主流的部署平台都是基于Linux的。本文将详细讲解使用Linux搭建web服务器的过程。搭建成功之后,可以通过网址:www.zhougb3.cn访问我的个人博客主页。1.准备工作为了让用户都可以访问我们的网站,我们需要有一台可以通过外网访问的服务器,

zhougb3的博客 2万+

[Linux]从零开始的网站搭建教程

讲解了如何搭建运维面板安装web服务器和搭建一个自己的网站。

c858845275的博客 4424

从数学到机床:RTCP背后的几何变换与工业实现

本文深入解析RTCP(Rotary Tool Center Point)技术在五轴数控加工中的核心作用,通过几何变换与运动学原理实现刀尖点跟随,确保加工精度。从数学基础到工业实现,详细探讨了算法架构、机床结构适配及精度保障方法,为数控系统开发和高效加工提供关键技术支撑。

jump7的博客 261

WebRtc03: Web服务器原理和Nodejs搭建

在浏览器上输入ip:8080,可以看到helloworld打印。以阿里云的云服务器为例,需要打开安全组的端口8080。服务器是基于centos的,使用yum命令下载。运行服务器并用另一个端口查看是否启动服务器。或者直接使用官方的二进制库。

upset_poor的博客 555

手把手教你搞定JBI投稿:从Statement of Significance到Declaration Statement的保姆级避坑指南

本文提供了一份详细的JBI投稿指南,重点解析Statement of Significance和Declaration of Interests的撰写技巧,帮助研究者避开常见格式陷阱。通过实战案例和检查清单,确保投稿符合JBI的学术严谨性和临床转化价值要求,提升稿件通过率。

weixin_29278805的博客 624

SuperPoint+SuperGlue在HLoc中的实战效果对比:5大公开数据集测试报告

本文在HLoc框架下,对传统SIFT与深度学习组合SuperPoint+SuperGlue在五大公开数据集上的视觉定位效果进行了实战对比测试。报告详细分析了两种方案在Aachen Day-Night、RobotCar Seasons等不同光照、季节及场景下的表现,揭示了SuperPoint+SuperGlue在应对剧烈光照变化和长期外观变化时的显著优势,并提供了基于HLoc模块化设计的选型与配置策略。

weixin_29093169的博客 425

搭建ngrok服务器(搭建内网穿透服务器)

搭建ngrok服务器(内网穿透服务器) 一:为什么要使用ngrok? 一:编辑作为一个Web开发者,我们有时候会需要临时地将一个本地的Web网站部署到外网,以供他人体验评价或协助调试等等,通常我们会这么做: 1:找到一台运行于外网的Web服务器 2:服务器上有网站所需要的环境,否则自行搭建 3:将网站部署到服务器上 4:调试结束后,再将网站从服务器上删除 二:只不过是想向朋友展示一下网站而已,要不要这么麻烦,累感不爱╰(`□′)╯ 有了ngrok之后,世界是如此的美好只需要启动ngrok,你会得到一串网址,

行者蚊子的博客 2075

python监听海康威视报警服务器

因为我使用海康威视摄像头是自带热成像的所以事件报警会上报两张图片,一张是RGB图像、另一张是热成像图像,因此使用。拿到的就是第一张RGB图像。可以点击测试,会显示。

qq_57018478的博客 1161

服务计算——开发简单 web 服务程序 cloudgo

文章目录服务计算——cloudgo1. 基本任务——搭建简单web服务器1.1 框架选择1.2 代码1.2.1 main.go1.2.2 server.go1.3 服务器测试1.3.1 运行服务器输出helloworld1.3.2 curl 测试1.3.3 ab测试2. 拓展任务 net/http 源码阅读与关键功能解释2.1 HTTP的处理流程2.2 Handler2.3 ServerMux2....

wyxwyx469410930的博客 610

细说STM32单片机SPI-Flash芯片的FatFS移植及其应用实例详解

本文以开发板上的SPI-Flash芯片W25Q16为媒介详细介绍CubeMX中FatFS各个参数的意义和设置,分析生成的代码中FatFS各个文件的作用和关联,完成针对W25Q16的硬件访问层的移植。继续使用旺宝红龙开发板STM32F407ZGT6 KITV1.0。

wenchm的博客 1641

麒麟桌面操作系统QT开发环境搭建

麒麟操作系统安装Qt

因为热爱,所以坚持,记录工作中的乐趣 9275

go web java web_Java, Go web server

1. 使用java, go自带web serverjava语言版本参考http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/jre/api/net/httpserver/spec/com/sun/net/httpserver/package-summary.html 的 A minimal Http server examplepac...

weixin_32691823的博客 138

全球建筑物提取数据集(免费下载):微软/GlobalMLBuildingFootprints

这个是GitHub上的开源数据集: https://github.com/microsoft/GlobalMLBuildingFootprints 介绍 必应地图正在世界各地发布开放式建筑足迹。我们从 2014 年到 2021 年间的 Bing Maps 图像中检测到了 7.77 亿座建筑物,包括 Maxar 和 Airbus 的图像。数据可在 ODbL 下免费下载和使用。该数据集补充了我们的其他版本。 包括的地区 执照 此数据由 Microsoft 根据Open Dat..

此星光明博客 6290

【亲测免费】 C Http服务器源码下载

C# Http服务器源码下载 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库提供了一个基于C#编写的Http服务器源码,适用于Visual Studio 2010(VS2010)。该源码可以帮助开发者快速搭建一个简单的Http服务器,适用于学习和开发小型Web应用。 资源文件 文件名: C# Http服务器 描述: 【源码】【vs2010】Http服务器 使用说...

gitblog_09755的博客 340

线性代数-第24篇:线性代数在控制系统中的核心应用

线性代数通过状态空间建模、矩阵分解与优化算法,为控制系统提供了从理论分析到工程实现的完整框架。从传统PID控制到现代智能控制,其应用贯穿系统设计、分析与优化的全流程。未来,随着多智能体协同控制、量子控制系统等前沿领域的发展,线性代数将在高维矩阵计算、分布式优化等方向持续创新,为复杂控制系统的突破提供核心支撑。如果对线性代数在控制系统中的应用细节有疑问,欢迎在评论区留言!

无 424

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

c html服务器端,[C语言][网络编程][源码阅读]简单Web服务端实现:浏览器访问 http://127.0.0.1:9190/index.html (响应GET请求)...

目录零、完整源码下载一、代码运行结果(这个代码有啥用?)二、服务器端(Server)与 客户端(Client)三、用套接字来连接网络四、源码阅读1、webserv_linux.c是基于多线程模型实现的Web服务器端2、Socket 套接字部分(1) 套接字 serv_sock 的作用(2) Request Header ,实现响应GET请求(3) 套接字 clnt_sock的作用(4) Respo...

weixin_33215027的博客 702

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

linux系统下简单的web服务器的搭建

linux下创建含简单内容的web服务器 前言: 一、 linux系统下安装软件有多种方式: 1、使用rpm命令安装扩展名为".rpm"的软件包 (文件系统内必须含有此rpm包) 2、yum命令 ( 使用yum命令时,必须依赖于yum源,而yum源可以从互联网获取,也可以建立本地的yum源) 3.使用dnf命令编译安装源码包 优点: 可以获得最新的软件,及时修复bug; 根据用户的需求,灵活定制软件功能; 可以直接安装该软件的附加包,省时省力; 注:该方式使用的前提需在本地建立软件仓库 二、 使用dnf命

weixin_46540009的博客 7287

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

20分钟轻松搭建一个嵌入式web服务器

嵌入式Linux,boa,web服务器

weixin_45834340的博客 5404

群晖7.X搭建本地web服务器

正文:简介:本文介绍了如何在群晖NAS上搭建基于Web Station的本地web服务器,通过简单的设置即可搭建个人网站或内部使用的web应用。

春枫 1万+

Ubuntu下Web服务器的搭建

相关阅读: Ubuntu下NFS服务器的配置 http://www.linuxidc.com/Linux/2012-12/75235.htm Ubuntu下ftp服务器的配置 http://www.linuxidc.com/Linux/2012-12/75233.htm 1:Apache介绍 Apache是世界使用排名第一的web服务器软件,它可以运行在几乎所有广泛使用的计算机平台上

2万+

Jackson 序列化 / 反序列化注解 完整版笔记

Jackson 序列化 / 反序列化注解 完整版笔记

handsome_sai的博客 282
上一篇: Eclipse汉化包安装
下一篇: java基础小试几题
TimerBin
博客等级 码龄12年 54粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值