2011-04-20 111 views
1

我想实现一个简单的http csharp服务器,当用户通过服务器IP连接进行连接时,会向浏览器发送诸如index.html之类的文档。我目前对如何通过网络浏览器发送一个简单的.html文档有点困惑,因此连接用户可以看到它。简单的C#HTTP/TCP服务器

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

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 OK\r\n"; 
      outStream.Write(stringOut.ToCharArray()); 

      stringOut = "Content-Type: text/html\r\n"; 
      outStream.Write(stringOut.ToCharArray()); 

      stringOut = "Date: "; 
      outStream.Write(stringOut.ToCharArray()); 
      stringOut = Convert.ToString(DateTime.Now); 
      outStream.Write(stringOut.ToCharArray()); 
      stringOut = "\r\n"; 
      outStream.Write(stringOut.ToCharArray()); 

      stringOut = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\r\n"; 
      outStream.Write(stringOut.ToCharArray()); 

      stringOut = "<html>\r\n"; 
      outStream.Write(stringOut.ToCharArray()); 

      stringOut = "<body>\r\n"; 
      outStream.Write(stringOut.ToCharArray()); 

      stringOut = "Welcome to <strong>" + userName + "'s </strong>primative HTTP server"; 
      outStream.Write(stringOut.ToCharArray()); 

      stringOut = "</body></html>\r\n"; 
      outStream.Write(stringOut.ToCharArray()); 

      inStream.Close(); 
      outStream.Flush(); 
      outStream.Close(); 
      connectionStream.Close(); 
      connection.Close(); 

      Console.Out.WriteLine("Done; Connection closed."); 
     } 
    } 
} 
+2

你什么错误+ – jgauffin 2011-04-20 08:28:47

回答

2

你不需要全部使用套接字作为HttpListener HTTP代码已经从.NET 2.0提供的写。如果它符合您的要求,请尝试一下。

+0

与HttpListener是你必须运行在OS的东西之前,它会让你接受连接,即 的netsh的http添加urlacl URL = HTTP缺点:// +:80/MyUri用户= DOMAIN \ user – Vdex 2016-10-18 19:36:15

+0

任何备用解决方案?我有一些问题与httplistener工作 – Mahdi 2017-02-25 05:01:57