简单的c# Http/TCP服务器



我正在尝试实现一个简单的http csharp服务器,当用户通过服务器IP连接时,它会发送一个文档,如index.html到浏览器。我目前有点困惑,我将如何去发送一个简单的。html文档通过web浏览器,以便连接用户可以看到它。

输出是所有信息被发送到浏览器的地方。

using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.IO;
using System.Threading;
namespace TCP_Socket
{
    class ConnectionThread
    {
        public ConnectionThread(Socket socketToHandleConnection)
        {
            connection = socketToHandleConnection;
        }
        Socket        connection       = null;   //TCP/IP socket to handle the actual connection
        NetworkStream connectionStream = null;
        BinaryReader  inStream         = null;
        BinaryWriter  outStream        = null;
        String        userName         = null;
        public void run()
        {
            connectionStream = new NetworkStream(connection);
            inStream  = new BinaryReader(connectionStream);
            outStream = new BinaryWriter(connectionStream);
            userName = Environment.UserName;
            byte b = 0;
            String s = "";      //This will contain all the stuff the browser transmitted,
                                //but "all in one go".
            try
            {
                while (connectionStream.DataAvailable)
                {
                    b = (byte)inStream.ReadSByte();
                    Console.Out.Write((char)b);
                    s += (char)b;
                }
                String[] items = s.Split();//This will contain all the stuff the browser transmitted,

            }
            catch (EndOfStreamException eos)
            {
                Console.Out.WriteLine("Unexpected end of stream.");
                Console.Out.WriteLine("Error caused by " + eos.Message);
            }
            Console.Out.WriteLine("End of stream.");
            String stringOut = "HTTP/ 1.1 200 OKrn";
            outStream.Write(stringOut.ToCharArray());
            stringOut = "Content-Type: text/htmlrn";
            outStream.Write(stringOut.ToCharArray());
            stringOut = "Date: ";
            outStream.Write(stringOut.ToCharArray());
            stringOut = Convert.ToString(DateTime.Now);
            outStream.Write(stringOut.ToCharArray());   
            stringOut = "rn";
            outStream.Write(stringOut.ToCharArray());
            stringOut = "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">rn";
            outStream.Write(stringOut.ToCharArray());
            stringOut = "<html>rn";
            outStream.Write(stringOut.ToCharArray());
            stringOut = "<body>rn";
            outStream.Write(stringOut.ToCharArray());
            stringOut = "Welcome to <strong>" + userName + "'s </strong>primative HTTP server";
            outStream.Write(stringOut.ToCharArray());
            stringOut = "</body></html>rn";
            outStream.Write(stringOut.ToCharArray());
            inStream.Close();
            outStream.Flush();
            outStream.Close();
            connectionStream.Close();
            connection.Close();
            Console.Out.WriteLine("Done; Connection closed.");
        }
    }
}

您不需要使用套接字编写所有HTTP代码,因为。net 2.0已经提供了HttpListener。如果符合你的要求,可以试一试。

经过搜索,我找到了一些其他的解决方案:

其他类似的嵌入式服务器包括:

    HTTP服务器框架c#示例
  • 嵌入式。net HTTP服务器
  • 系统。.NET HttpListener(基于。Net Framework 3.5 SP1)
  • zeroconf.codeplex.com中提供的HTTP服务器
  • c#中简单的HTTP服务器

最新更新