2011-03-09 20 views
5

को डेटा भेजने के लिए कैसे यह किसी भी अनुभवी सी # डेवलपरसी # Async वेबसर्वर - ग्राहक

के लिए केक का एक टुकड़ा हो सकता है क्या आप यहाँ देख एक नमूना अतुल्यकालिक वेबसर्वर

using System; 
using System.Text; 
using System.Net; 
using System.Net.Sockets; 
using System.Threading; 

namespace SimpleServer 
{ 
    class Program 
    { 
     public static void ReceiveCallback(IAsyncResult AsyncCall) 
     {    
      System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); 
      Byte[] message = encoding.GetBytes("I am a little busy, come back later!");    
      Socket listener = (Socket)AsyncCall.AsyncState; 
      Socket client = listener.EndAccept(AsyncCall); 
      Console.WriteLine("Received Connection from {0}", client.RemoteEndPoint); 
      client.Send(message); 
      Console.WriteLine("Ending the connection"); 
      client.Close(); 
      listener.BeginAccept(new AsyncCallback(ReceiveCallback), listener); 
     } 

    public static void Main() 
    { 
     try 
     { 
      IPAddress localAddress = IPAddress.Parse("127.0.0.1"); 
      Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
      IPEndPoint ipEndpoint = new IPEndPoint(localAddress, 8080); 
      listenSocket.Bind(ipEndpoint); 
      listenSocket.Listen(1); 
      listenSocket.BeginAccept(new AsyncCallback(ReceiveCallback), listenSocket); 
      while (true) 
      {      
       Console.WriteLine("Busy Waiting...."); 
       Thread.Sleep(2000); 
      }     
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("Caught Exception: {0}", e.ToString()); 
     } 
    } 
} 

मैं से डाउनलोड किया है वेब, काम करने के लिए एक बुनियादी मॉडल रखने के लिए।

असल में मुझे जो करना है वह इस वेबसर्वर को कंप्यूटर में प्रक्रिया के रूप में चलाता है। यह हर समय 8080 पोर सुन रहा होगा, और जब कोई क्लाइंट कंप्यूटर अनुरोध भेजता है, तो यह सर्वर कुछ डेटा संसाधित करेगा और एक स्ट्रिंग के रूप में परिणाम वापस भेज देगा।

मैं इस कोड (जो के रूप में काम करती है) के साथ एक छोटे प्रोजेक्ट बनाया, लेकिन जब यह लाइन

client.Send(message); 

कार्यान्वित सब मैं ब्राउज़र में एक त्रुटि है, या सबसे एक रिक्त पृष्ठ

पर

मैं मैं HTTP हेडर (संदेश) के साथ भेजने के लिए परिभाषित करने की जरूरत संदेह है, लेकिन मैं कोई भाग्य

किसी को भी तैयार करने में मदद करने के साथ इस पर वेब की खोज की गई है?

धन्यवाद!

उत्तर

4

आप इस

HTTP/1.1 200 OK 
Server: My Little Server 
Content-Length: [Size of the Message here] 
Content-Language: en 
Content-Type: text/html 
Connection: close 

[Message] 

की तरह कुछ की जरूरत है आप डेटा के इस छेद ब्लॉक इसे सही ढंग से काम करना चाहिए भेजें।

संपादित करें:

आप इस विधि का उपयोग कर सकते हैं:

public static void SendHeader(string sMIMEHeader, int iTotBytes, string sStatusCode, ref Socket mySocket) 
    { 
     String sBuffer = ""; 
     // if Mime type is not provided set default to text/html 
     if (sMIMEHeader.Length == 0) 
     { 
      sMIMEHeader = "text/html"; // Default Mime Type is text/html 
     } 
     sBuffer = sBuffer + "HTTP/1.1" + sStatusCode + "\r\n"; 
     sBuffer = sBuffer + "Server: cx1193719-b\r\n"; 
     sBuffer = sBuffer + "Content-Type: " + sMIMEHeader + "\r\n"; 
     sBuffer = sBuffer + "Accept-Ranges: bytes\r\n"; 
     sBuffer = sBuffer + "Content-Length: " + iTotBytes + "\r\n\r\n"; 
     Byte[] bSendData = Encoding.ASCII.GetBytes(sBuffer); 
     mySocket.Send(Encoding.ASCII.GetBytes(sBuffer),Encoding.ASCII.GetBytes(sBuffer).Length, 0); 
     Console.WriteLine("Total Bytes : " + iTotBytes.ToString()); 
    } 

और अपने मुख्य() में - विधि आप बदलना चाहिए

Byte[] message = encoding.GetBytes("I am a little busy, come back later!"); 

string messageString = "I am a little busy, come back later!"; 
Byte[] message = encoding.GetBytes(messageString); 
साथ 210

और फिर सम्मिलित

// Unicode char may have size more than 1 byte so we should use message.Length instead of messageString.Length 
SendHeader("text/html", message.Length, "202 OK", ref client); 

client.Send(message); 

सब है कि पहले।

+0

टिप के लिए धन्यवाद! मैं थोड़ी सी गुगल रहा हूं, लेकिन मुझे HTTP शीर्षलेख उत्पन्न करने का कोई तरीका नहीं मिल रहा है ... क्या आप मुझे चिपकाए गए कोड के आधार पर एक लिंक या उदाहरण दे सकते हैं? फिर से धन्यवाद! – jprealini

+0

इस पर काम करना। मजेदार तथ्य: मैंने आपके कोड की प्रतिलिपि बनाई, इसे संकलित किया, और यह काम करता है :- डी – Tokk

+0

वाह, बढ़िया! एक और मजेदार तथ्य: मेरे पास एक और टेस्ट प्रोजेक्ट में इस तरह की एक विधि थी जिस पर मैं काम कर रहा था, और इसे लगभग बिल्कुल ठीक करने में कामयाब रहा, जैसा कि आपने इसे यहां वर्णित किया है, और यह पूरी तरह से काम करता है ... एक लाख धन्यवाद ... मुझे लगता है कि मैं अभी भी इस तरह के बिंदु या सामान असाइन नहीं कर सकते हैं, लेकिन आपको पता होना चाहिए कि अगर मैं कर सकता हूं तो मुझे आपको कुछ खुशी होगी ... धन्यवाद! – jprealini

संबंधित मुद्दे