public static void start(int port) { do { var tcpClient = SimpleWebServer.wait(port); Task.Factory.StartNew( () => { var networkStream = tcpClient.GetStream(); var requestBuff = new byte[4096]; var requestResource = ""; try { networkStream.Read(requestBuff, 0, 4096); } catch { return; } try { var requestString = System.Text.Encoding.UTF8.GetString(requestBuff); var requestLines = requestString.Replace("\r", "").Split((char)10); var requestLine = (String)requestLines.First(); var requestParams = requestLine.Split(" "[0]); requestResource = requestParams[1]; } catch { return; } var existing = resources.SingleOrDefault(x => x.resource == requestResource); if (existing == null) { Task.Factory.StartNew(() => { var responseBuffer = System.Text.Encoding.UTF8.GetBytes("HTTP/1.0 404 Not Found\r\n\r\n"); networkStream.Write(responseBuffer, 0, responseBuffer.Length); tcpClient.Close(); return; }); } else { Task.Factory.StartNew(() => { var responseBytes = new List <byte>(); responseBytes.AddRange(System.Text.Encoding.UTF8.GetBytes("HTTP/1.0 200 OK\r\n\r\n").ToArray()); var responseObject = existing.handler.Invoke(requestBuff); byte[] contentBuffer; if (responseObject.GetType() == typeof(String)) { contentBuffer = System.Text.Encoding.UTF8.GetBytes((String)responseObject); } else { contentBuffer = (Byte[])responseObject; } responseBytes.AddRange(contentBuffer); var responseBuffer = responseBytes.ToArray(); networkStream.Write(responseBuffer, 0, responseBuffer.Length); tcpClient.Close(); return; }); } }); } while (true); }