第1回 Web の仕組みについて

公開日:2015-04-26

1. 概要

独り言による Webプログラミング講座、「第1回 Web の仕組みについて」です。

2. 動画


3. 簡易Webサーバのソース

Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
using System.Threading;
using System.Net;
using System.Net.Sockets;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //★独り言によるWebプログラミング講座
            
            //■Webの仕組みについて
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //リスナーを設定します
            IPAddress ip = IPAddress.Parse("127.0.0.1");
            int port = 80;
            TcpListener listener = new TcpListener(ip, port);

            //リクエストの受付開始
            listener.Start();

            //while (true) {
                TcpClient client = listener.AcceptTcpClient(); //リクエストが来るまで待機

                //リクエストの取得
                NetworkStream stream = client.GetStream();

                //クライアントから送られたデータを受信する
                byte[] data = new byte[256]; //読み込んだリクエストデータの一部分
                int size = 0; //読み込んだサイズ
                StringBuilder sb = new StringBuilder();
                while((size = stream.Read(data, 0, data.Length)) != 0) {
                    sb.Append(Encoding.ASCII.GetString(data, 0, size));

                    if (stream.DataAvailable == false) break; //読み込むデータがなくなったら抜ける。
                                                              //これをしないとRead()で待機してしまう。
                }
                
                //クライアントからのリクエスト内容の表示
                txtRequest.Text = sb.ToString();

                //パスの取得
                String filename = sb.ToString().Split('\n').First().Split(' ')[1];

                //ファイル読み込み
                //String html = File.ReadAllText(filename.Substring(1));
                String html = txtAnswer.Text;

                //クライアントにデータを返す
                byte[] htmlData = Encoding.UTF8.GetBytes(html);
                stream.Write(htmlData, 0, htmlData.Length);

                stream.Close();
                client.Close();
            //}

            listener.Stop();
        }
    }
}