2010-01-14 171 views
0

我如何發送消息回瀏覽器或本地主機,例如,如果我想顯示消息調用....這是在瀏覽器中測試。使用HttpWebRequest發送HTML到瀏覽器

using System; 
using System.IO; 
using System.Net; 
using System.Net.Sockets; 
using System.Text; 

class MyTcpListener 
{ 
    public static void Main() 
    { 


    try 
    { 

     // Set the TcpListener on port 13000. 
      Int32 port = 80; 
      IPAddress localAddr = IPAddress.Parse("127.0.0.1"); 

      // TcpListener server = new TcpListener(port); 
      TcpListener server = new TcpListener(localAddr, port); 

      // Start listening for client requests. 
      server.Start(); 

      // Buffer for reading data 
      Byte[] bytes = new Byte[256]; 
      String data = null; 

      // Enter the listening loop. 
      while (true) 
      { 
       Console.Write("Waiting for a connection... "); 

       // Perform a blocking call to accept requests. 
       // You could also user server.AcceptSocket() here. 
       TcpClient client = server.AcceptTcpClient(); 
       Console.WriteLine("Connected!"); 

       data = null; 

       // Get a stream object for reading and writing 
       NetworkStream stream = client.GetStream(); 

       int i; 

       // Loop to receive all the data sent by the client. 
       while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) 
       { 
        // Translate data bytes to a ASCII string. 
        data = System.Text.Encoding.ASCII.GetString(bytes, 0, i); 
        Console.WriteLine(String.Format("Received: {0}", data)); 

        // Process the data sent by the client. 
        data = data.ToUpper(); 

        byte[] msg = System.Text.Encoding.ASCII.GetBytes(data); 

        // Send back a response. 
        stream.Write(msg, 0, msg.Length); 
        Console.WriteLine("Sending message.."); 

       } 

       // Shutdown and end connection 
       client.Close(); 
      } 
     } 
     catch (SocketException e) 
     { 
      Console.WriteLine("SocketException: {0}", e); 
     } 

     Console.WriteLine("\nHit enter to continue..."); 
     Console.Read(); 
    } 
} 
+2

那麼,什麼問題?出了什麼問題?順便說一句,你知道瀏覽器只顯示HTML嗎? – 2010-01-14 23:40:43

+0

是的,我想顯示東西atleast ...但沒有線索.. – tike 2010-01-15 00:04:40

+0

好吧,現在,_why_你在做這個?這是功課嗎?我問,因爲你似乎正在創建一個Web服務器,這已經完成了。 – 2010-01-15 00:14:32

回答

0

直到您檢索0個字節爲止,您應該閱讀,直到找到空行。在開放網絡連接的最後一位調用Read()只會阻塞,直到瀏覽器發送更多數據(這不會因爲它發送了所有內容並等待着您)。

class MyTcpListener 
{ 
    public static void Main() 
    { 


     try 
     { 

      // Set the TcpListener on port 13000. 
      Int32 port = 80; 
      IPAddress localAddr = IPAddress.Parse("127.0.0.1"); 

      // TcpListener server = new TcpListener(port); 
      TcpListener server = new TcpListener(localAddr, port); 

      // Start listening for client requests. 
      server.Start(); 

      // Enter the listening loop. 
      while (true) 
      { 
       Console.Write("Waiting for a connection... "); 

       // Perform a blocking call to accept requests. 
       // You could also user server.AcceptSocket() here. 
       TcpClient client = server.AcceptTcpClient(); 
       Console.WriteLine("Connected!"); 


       // Get a stream object for reading and writing 
       using(NetworkStream stream = client.GetStream()) 
       using (StreamReader sr = new StreamReader(stream)) 
       { 
        List<byte> msg = new List<byte>(); 
        // Loop to receive all the data sent by the client. 
        string data; 
        while ((data = sr.ReadLine()) != "") 
        { 
         Console.WriteLine(String.Format("Received: {0}", data)); 

         // Process the data sent by the client. 
         data = data.ToUpper(); 

         msg.AddRange(System.Text.Encoding.ASCII.GetBytes(data)); 

        } 

        // Send back a response. 
        stream.Write(msg.ToArray(), 0, msg.Count); 
        Console.WriteLine("Sending message.."); 
       } 
       client.Close(); 
      } 
     } 
     catch (SocketException e) 
     { 
      Console.WriteLine("SocketException: {0}", e); 
     } 

     Console.WriteLine("\nHit enter to continue..."); 
     Console.Read(); 
    } 
} 
0

這似乎是一個控制檯應用程序,而不是一個網站,所以在Console.WriteLine語句生成的輸出將去到調試控制檯,如果你在Visual Studio中運行它,或者他們應該顯示在屏幕上,如果你從命令提示符運行它作爲編譯的應用程序。

這是什麼類型的項目的一部分?

+0

是的,這是控制檯應用程序知道它是如何工作的,而不是任何項目。我想做點什麼,我正在學習.net編程,以實現這些目標..它還沒有任何項目的任何部分。而你是正確的控制檯應用程序而不是網站。我想發送回瀏覽器。這樣我才能知道它是如何工作的。 – tike 2010-01-15 10:55:53

1
using(StreamWriter sw = new StreamWriter(stream)) 
{ 
    sw.Write("<html><body>Hello There!</body></html>"); 
} 

這應該將HTML寫入輸出流。確保在此之後關閉流。並關閉TcpClient。

+0

歡呼隊友這就是我想知道的。 – tike 2010-01-15 10:59:05