Click here to Skip to main content
15,884,388 members
Articles / Web Development / HTML

Building a Tiny WebServer in Less than 500 Lines

Rate me:
Please Sign up or sign in to vote.
4.88/5 (35 votes)
23 Aug 2013CPOL3 min read 130K   6K   152  
This tiny webserver can be hosted by applications that need to serve specialised web pages.
  • TinyServer_src.zip
    • TinyServer_src
      • RssAggregator
      • TinyServer
      • WebServer
        • App.config
        • App.ico
        • AssemblyInfo.cs
        • html
        • LibrarySupport
          • MsCorLib.dll
            • System
              • Collections
                • Collections.txvpck
              • IO
                • IO.txvpck
              • System.txvpck
              • Text
                • Text.txvpck
              • Threading
                • Threading.txvpck
          • System
            • System
              • Collections
                • Collections.txvpck
                • Specialized
                  • Specialized.txvpck
              • Net
                • Net.txvpck
                • Sockets
                  • Sockets.txvpck
              • System.txvpck
        • Properties
        • root
          • CodeCommentReport
            • banner.htm
            • banner.jpg
            • CodeCommentReportError.htm
            • commentreport.css
            • darkcorner.jpg
            • gradleft.jpg
            • gradtop.jpg
            • graycorner.jpg
            • minus.jpg
            • plus.jpg
            • PyramidAnim2.gif
            • Solution_TinyServer.HTM
            • Solution_WebServer.HTM
            • titletile.jpg
            • vt.js
            • WebServer
              • CWP0.HTM
              • CWP10.HTM
              • CWP11.HTM
              • CWP12.HTM
              • CWP13.HTM
              • CWP14.HTM
              • CWP15.HTM
              • CWP16.HTM
              • CWP17.HTM
              • CWP18.HTM
              • CWP19.HTM
              • CWP2.HTM
              • CWP20.HTM
              • CWP21.HTM
              • CWP23.HTM
              • CWP24.HTM
              • CWP25.HTM
              • CWP26.HTM
              • CWP27.HTM
              • CWP28.HTM
              • CWP29.HTM
              • CWP3.HTM
              • CWP30.HTM
              • CWP31.HTM
              • CWP32.HTM
              • CWP33.HTM
              • CWP34.HTM
              • CWP35.HTM
              • CWP36.HTM
              • CWP37.HTM
              • CWP38.HTM
              • CWP39.HTM
              • CWP4.HTM
              • CWP40.HTM
              • CWP41.HTM
              • CWP42.HTM
              • CWP43.HTM
              • CWP44.HTM
              • CWP45.HTM
              • CWP46.HTM
              • CWP47.HTM
              • CWP48.HTM
              • CWP49.HTM
              • CWP5.HTM
              • CWP50.HTM
              • CWP51.HTM
              • CWP52.HTM
              • CWP53.HTM
              • CWP54.HTM
              • CWP55.HTM
              • CWP56.HTM
              • CWP57.HTM
              • CWP58.HTM
              • CWP59.HTM
              • CWP6.HTM
              • CWP60.HTM
              • CWP61.HTM
              • CWP62.HTM
              • CWP63.HTM
              • CWP64.HTM
              • CWP65.HTM
              • CWP66.HTM
              • CWP67.HTM
              • CWP68.HTM
              • CWP7.HTM
              • CWP8.HTM
              • CWP9.HTM
              • WebServer.HTM
          • default.html
          • default.html.bak
          • form.html
          • form.html.bak
          • TinyServer
            • CWP0.HTM
            • CWP10.HTM
            • CWP11.HTM
            • CWP12.HTM
            • CWP13.HTM
            • CWP14.HTM
            • CWP15.HTM
            • CWP16.HTM
            • CWP17.HTM
            • CWP18.HTM
            • CWP2.HTM
            • CWP20.HTM
            • CWP21.HTM
            • CWP22.HTM
            • CWP23.HTM
            • CWP24.HTM
            • CWP25.HTM
            • CWP26.HTM
            • CWP27.HTM
            • CWP28.HTM
            • CWP29.HTM
            • CWP3.HTM
            • CWP30.HTM
            • CWP31.HTM
            • CWP32.HTM
            • CWP33.HTM
            • CWP34.HTM
            • CWP35.HTM
            • CWP36.HTM
            • CWP37.HTM
            • CWP38.HTM
            • CWP39.HTM
            • CWP4.HTM
            • CWP40.HTM
            • CWP41.HTM
            • CWP42.HTM
            • CWP43.HTM
            • CWP44.HTM
            • CWP45.HTM
            • CWP46.HTM
            • CWP47.HTM
            • CWP48.HTM
            • CWP49.HTM
            • CWP5.HTM
            • CWP50.HTM
            • CWP51.HTM
            • CWP52.HTM
            • CWP53.HTM
            • CWP54.HTM
            • CWP55.HTM
            • CWP56.HTM
            • CWP57.HTM
            • CWP58.HTM
            • CWP59.HTM
            • CWP6.HTM
            • CWP60.HTM
            • CWP61.HTM
            • CWP62.HTM
            • CWP63.HTM
            • CWP64.HTM
            • CWP65.HTM
            • CWP66.HTM
            • CWP67.HTM
            • CWP7.HTM
            • CWP8.HTM
            • CWP9.HTM
            • TinyServer.HTM
          • WebServer
            • CWP0.HTM
            • CWP2.HTM
            • CWP3.HTM
            • CWP4.HTM
            • CWP5.HTM
            • WebServer.HTM
        • ServerHost.cs
        • TinyServer.csproj.user
        • WebServer.csproj
        • WebServer.csproj.user
  • tinyserver_demo.zip
    • Applications
      • RssAggregator
      • WebServer
        • html
        • root
          • CodeCommentReport
            • banner.htm
            • banner.jpg
            • CodeCommentReportError.htm
            • commentreport.css
            • darkcorner.jpg
            • gradleft.jpg
            • gradtop.jpg
            • graycorner.jpg
            • minus.jpg
            • plus.jpg
            • PyramidAnim2.gif
            • Solution_TinyServer.HTM
            • Solution_WebServer.HTM
            • titletile.jpg
            • vt.js
            • WebServer
              • CWP0.HTM
              • CWP10.HTM
              • CWP11.HTM
              • CWP12.HTM
              • CWP13.HTM
              • CWP14.HTM
              • CWP15.HTM
              • CWP16.HTM
              • CWP17.HTM
              • CWP18.HTM
              • CWP19.HTM
              • CWP2.HTM
              • CWP20.HTM
              • CWP21.HTM
              • CWP23.HTM
              • CWP24.HTM
              • CWP25.HTM
              • CWP26.HTM
              • CWP27.HTM
              • CWP28.HTM
              • CWP29.HTM
              • CWP3.HTM
              • CWP30.HTM
              • CWP31.HTM
              • CWP32.HTM
              • CWP33.HTM
              • CWP34.HTM
              • CWP35.HTM
              • CWP36.HTM
              • CWP37.HTM
              • CWP38.HTM
              • CWP39.HTM
              • CWP4.HTM
              • CWP40.HTM
              • CWP41.HTM
              • CWP42.HTM
              • CWP43.HTM
              • CWP44.HTM
              • CWP45.HTM
              • CWP46.HTM
              • CWP47.HTM
              • CWP48.HTM
              • CWP49.HTM
              • CWP5.HTM
              • CWP50.HTM
              • CWP51.HTM
              • CWP52.HTM
              • CWP53.HTM
              • CWP54.HTM
              • CWP55.HTM
              • CWP56.HTM
              • CWP57.HTM
              • CWP58.HTM
              • CWP59.HTM
              • CWP6.HTM
              • CWP60.HTM
              • CWP61.HTM
              • CWP62.HTM
              • CWP63.HTM
              • CWP64.HTM
              • CWP65.HTM
              • CWP66.HTM
              • CWP67.HTM
              • CWP68.HTM
              • CWP7.HTM
              • CWP8.HTM
              • CWP9.HTM
              • WebServer.HTM
          • default.html
          • TinyServer
            • CWP0.HTM
            • CWP10.HTM
            • CWP11.HTM
            • CWP12.HTM
            • CWP13.HTM
            • CWP14.HTM
            • CWP15.HTM
            • CWP16.HTM
            • CWP17.HTM
            • CWP18.HTM
            • CWP2.HTM
            • CWP20.HTM
            • CWP21.HTM
            • CWP22.HTM
            • CWP23.HTM
            • CWP24.HTM
            • CWP25.HTM
            • CWP26.HTM
            • CWP27.HTM
            • CWP28.HTM
            • CWP29.HTM
            • CWP3.HTM
            • CWP30.HTM
            • CWP31.HTM
            • CWP32.HTM
            • CWP33.HTM
            • CWP34.HTM
            • CWP35.HTM
            • CWP36.HTM
            • CWP37.HTM
            • CWP38.HTM
            • CWP39.HTM
            • CWP4.HTM
            • CWP40.HTM
            • CWP41.HTM
            • CWP42.HTM
            • CWP43.HTM
            • CWP44.HTM
            • CWP45.HTM
            • CWP46.HTM
            • CWP47.HTM
            • CWP48.HTM
            • CWP49.HTM
            • CWP5.HTM
            • CWP50.HTM
            • CWP51.HTM
            • CWP52.HTM
            • CWP53.HTM
            • CWP54.HTM
            • CWP55.HTM
            • CWP56.HTM
            • CWP57.HTM
            • CWP58.HTM
            • CWP59.HTM
            • CWP6.HTM
            • CWP60.HTM
            • CWP61.HTM
            • CWP62.HTM
            • CWP63.HTM
            • CWP64.HTM
            • CWP65.HTM
            • CWP66.HTM
            • CWP67.HTM
            • CWP7.HTM
            • CWP8.HTM
            • CWP9.HTM
            • TinyServer.HTM
          • WebServer
            • CWP0.HTM
            • CWP2.HTM
            • CWP3.HTM
            • CWP4.HTM
            • CWP5.HTM
            • WebServer.HTM
        • RssAggregator.exe
        • RssAggregator.exe.config
        • TinyServerHost.exe
        • TinyServerHost.exe.config
        • TinyServerLib.dll
  • tinyserver_demov2.zip
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ProjectType>Local</ProjectType>
    <ProductVersion>8.0.50727</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{46307657-B30D-4E9E-AD5B-02264E4F5C86}</ProjectGuid>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ApplicationIcon>
    </ApplicationIcon>
    <AssemblyKeyContainerName>
    </AssemblyKeyContainerName>
    <AssemblyName>TinyServerLib</AssemblyName>
    <AssemblyOriginatorKeyFile>
    </AssemblyOriginatorKeyFile>
    <DefaultClientScript>JScript</DefaultClientScript>
    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
    <DefaultTargetSchema>IE50</DefaultTargetSchema>
    <DelaySign>false</DelaySign>
    <OutputType>Library</OutputType>
    <RootNamespace>TinyServerLib</RootNamespace>
    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
    <StartupObject>
    </StartupObject>
    <FileUpgradeFlags>
    </FileUpgradeFlags>
    <UpgradeBackupLocation>
    </UpgradeBackupLocation>
    <OldToolsVersion>3.5</OldToolsVersion>
    <SccProjectName>
    </SccProjectName>
    <SccLocalPath>
    </SccLocalPath>
    <SccAuxPath>
    </SccAuxPath>
    <SccProvider>
    </SccProvider>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <OutputPath>bin\Debug\</OutputPath>
    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
    <BaseAddress>285212672</BaseAddress>
    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
    <ConfigurationOverrideFile>
    </ConfigurationOverrideFile>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <DocumentationFile>
    </DocumentationFile>
    <DebugSymbols>true</DebugSymbols>
    <FileAlignment>4096</FileAlignment>
    <NoStdLib>false</NoStdLib>
    <NoWarn>
    </NoWarn>
    <Optimize>false</Optimize>
    <RegisterForComInterop>false</RegisterForComInterop>
    <RemoveIntegerChecks>false</RemoveIntegerChecks>
    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
    <WarningLevel>4</WarningLevel>
    <DebugType>full</DebugType>
    <ErrorReport>prompt</ErrorReport>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <OutputPath>bin\Release\</OutputPath>
    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
    <BaseAddress>285212672</BaseAddress>
    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
    <ConfigurationOverrideFile>
    </ConfigurationOverrideFile>
    <DefineConstants>TRACE</DefineConstants>
    <DocumentationFile>
    </DocumentationFile>
    <DebugSymbols>false</DebugSymbols>
    <FileAlignment>4096</FileAlignment>
    <NoStdLib>false</NoStdLib>
    <NoWarn>
    </NoWarn>
    <Optimize>true</Optimize>
    <RegisterForComInterop>false</RegisterForComInterop>
    <RemoveIntegerChecks>false</RemoveIntegerChecks>
    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
    <WarningLevel>4</WarningLevel>
    <DebugType>none</DebugType>
    <ErrorReport>prompt</ErrorReport>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System">
      <Name>System</Name>
    </Reference>
    <Reference Include="System.Data">
      <Name>System.Data</Name>
    </Reference>
    <Reference Include="System.Web">
      <Name>System.Web</Name>
    </Reference>
    <Reference Include="System.Xml">
      <Name>System.XML</Name>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="AssemblyInfo.cs">
      <SubType>Code</SubType>
    </Compile>
    <Compile Include="TinyServer.cs">
      <SubType>Code</SubType>
    </Compile>
    <None Include="ModelSupport\TinyServerLib\TinyServerLib.txvpck" />
    <None Include="ModelSupport\TinyServer\TinyServer.txvpck" />
  </ItemGroup>
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  <PropertyGroup>
    <PreBuildEvent>
    </PreBuildEvent>
    <PostBuildEvent>
    </PostBuildEvent>
  </PropertyGroup>
</Project>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
Australia Australia
I am a Software Engineer/Consultant. My work is focussed on helping teams to get more out of their work. So I teach how to do requirements, analysis and design in a format that is easy to understand and apply.
I help with testing too, from starting developers on automated unit testing to running whole testing teams and how they cooperate with development.

For really big projects I provide complete methodologies that support all of the lifecycle.

For relaxation I paddle a sea kayak around Sydney and the Central Coast or write utilities on rainy days to make my life easier.

Comments and Discussions