this program will show status of the led adress/internal/led but after few second it overrun.
program.cs
using System; using System.Net; using System.Net.Sockets; using System.Threading; using Microsoft.SPOT; using Microsoft.SPOT.Hardware; using SecretLabs.NETMF.Hardware; using SecretLabs.NETMF.Hardware.NetduinoPlus; namespace Oz1ldoHttpdServer { public class Program { public static void Main() { // write your code here OutputPort led = new OutputPort(Pins.ONBOARD_LED, false); Blinkingled blinkingled = new Blinkingled(led); Thread workerThread = new Thread(blinkingled.run); workerThread.Start(); Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].EnableDhcp(); Oz1ldoHttpServer oz1ldohttpserver = new Oz1ldoHttpServer(led); oz1ldohttpserver.ListenForRequest(); } } }Oz1ldoHttpdServer.cs
using System; using Microsoft.SPOT; using System.Net.Sockets; using System.Net; using System.Threading; using Microsoft.SPOT.Hardware; using SecretLabs.NETMF.Hardware.NetduinoPlus; namespace Oz1ldoHttpdServer { class Oz1ldoHttpServer : IDisposable { protected Socket socket = null; //open connection to onbaord led so we can blink it with every request protected OutputPort led; public Oz1ldoHttpServer(OutputPort ledfrommain) { //Initialize Socket class led = ledfrommain; socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //Request and bind to an IP from DHCP server socket.Bind(new IPEndPoint(IPAddress.Any, 80)); //Debug print our IP address Debug.Print(Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].IPAddress); //Start listen for web requests socket.Listen(10); ListenForRequest(); } public void ListenForRequest() { while (true) { using (Socket clientSocket = socket.Accept()) { //Get clients IP IPEndPoint clientIP = clientSocket.RemoteEndPoint as IPEndPoint; EndPoint clientEndPoint = clientSocket.RemoteEndPoint; //int byteCount = cSocket.Available; int bytesReceived = clientSocket.Available; if (bytesReceived > 0) { Oz1ldoHandleRequest bearbejddetaljerne = new Oz1ldoHandleRequest(clientSocket, clientIP, led); } } } } #region IDisposable Members ~Oz1ldoHttpServer() { Dispose(); } public void Dispose() { if (socket != null) socket.Close(); } #endregion } }
Oz1ldoHandleRequest.cs
using System; using System.Net.Sockets; using System.Net; using System.Text; using Microsoft.SPOT.Hardware; using Microsoft.SPOT; using SecretLabs.NETMF.Hardware.NetduinoPlus; namespace Oz1ldoHttpdServer { class Oz1ldoHandleRequest : IDisposable { OutputPort ledGem; public Oz1ldoHandleRequest(Socket clientSocket, IPEndPoint clientIP, OutputPort led) { ledGem = led; int bytesReceived = clientSocket.Available; byte[] buffer = new byte[bytesReceived]; int byteCount = clientSocket.Receive(buffer, bytesReceived, SocketFlags.None); string request = new string(Encoding.UTF8.GetChars(buffer)); if(0 == request.ToLower().IndexOf("get /")) {get(request,clientSocket,clientIP);} } private void get(string request, Socket clientSocket, IPEndPoint clientIP) { // internal harcoded code get register and so on if (5 == request.ToLower().IndexOf("internal/")) { intern(request, clientSocket, clientIP); } else { if (0 == request.ToLower().IndexOf("get / http/1.1")) { //empty request send default text string iptxt = clientIP.ToString(); Debug.Print(request); string txt1 = "Senders IP Adress -> "; string txt2 = "\r\n"; Debug.Print(txt1 + iptxt + txt2); Debug.Print("200 Default text responece\r\n"); //Compose a response string response = "Oz1ldo Test Server"; string header = "HTTP/1.0 200 OK\r\nContent-Type: text; charset=utf-8\r\nContent-Length: " + response.Length.ToString() + "\r\nConnection: close\r\n\r\n"; clientSocket.Send(Encoding.UTF8.GetBytes(header), header.Length, SocketFlags.None); clientSocket.Send(Encoding.UTF8.GetBytes(response), response.Length, SocketFlags.None); } else { // say somthing or get the code from sd card if there is one //empty request send default text string iptxt = clientIP.ToString(); Debug.Print(request); string txt1 = "Senders IP Adress -> "; string txt2 = "\r\n"; Debug.Print(txt1 + iptxt + txt2); //Compose a response unknowncmd(request, clientSocket, clientIP); } } } private void intern(string request, Socket clientSocket, IPEndPoint clientIP) { string test = "It is working"; Debug.Print(test); string commando = request.Substring(14); if (commando.IndexOf("HTTP") != -1) { string intcmd = commando.Substring(0, commando.IndexOf("HTTP")); switch (intcmd) { case "led ": { string ledstatus; if (ledGem.Read()) { ledstatus = " checked=true "; }else { ledstatus = ""; } string response = "<HTML><HEAD><META HTTP-EQUIV=CONTENT-TYPE CONTENT=text/html; charset=windows-1252><meta http-equiv= refresh content=1 /><TITLE>Led Status</TITLE><STYLE TYPE=text/css></STYLE></HEAD><BODY LANG=da-DK DIR=LTR><P ALIGN=CENTER STYLE=margin-bottom: 0cm><form><input type=radio name=diode id=lysdiode" + ledstatus + "/>Diode Status<br /></form></P><P AL1IGN=CENTER STYLE=margin-bottom: 0cm><BR></P></BODY></HTML>"; string header = "HTTP/1.0 200 OK\r\nContent-Type: text; charset=utf-8\r\nContent-Length: " + response.Length.ToString() + "\r\nConnection: close\r\n\r\n"; clientSocket.Send(Encoding.UTF8.GetBytes(header), header.Length, SocketFlags.None); clientSocket.Send(Encoding.UTF8.GetBytes(response), response.Length, SocketFlags.None); Debug.Print(ledstatus); } break; default: unknowncmd( request, clientSocket, clientIP); break; } } else unknowncmd(request, clientSocket, clientIP); } private void unknowncmd(string request, Socket clientSocket, IPEndPoint clientIP) { Debug.Print("404 file not found\r\n"); string response = "404 File not found"; string header = "HTTP/1.0 404 ERROR\r\nContent-Type: text; charset=utf-8\r\nContent-Length: " + response.Length.ToString() + "\r\nConnection: close\r\n\r\n"; clientSocket.Send(Encoding.UTF8.GetBytes(header), header.Length, SocketFlags.None); clientSocket.Send(Encoding.UTF8.GetBytes(response), response.Length, SocketFlags.None); } #region IDisposable Members ~Oz1ldoHandleRequest() { Dispose(); } public void Dispose() { } #endregion } }