1

我正在使用网络服务器通过运行 .netMF(netduino plus 2)的微控制器来控制家中的设备。下面的代码将一个简单的 html 页面写入通过 Internet 连接到微控制器的设备。

       while (true)
            {
                Socket clientSocket = listenerSocket.Accept();
                bool dataReady = clientSocket.Poll(5000000, SelectMode.SelectRead);
                if (dataReady && clientSocket.Available > 0)
                {
                    byte[] buffer = new byte[clientSocket.Available];
                    int bytesRead = clientSocket.Receive(buffer);
                    string request =
                    new string(System.Text.Encoding.UTF8.GetChars(buffer));
                    if (request.IndexOf("ON") >= 0)
                    {
                        outD7.Write(true);
                    }
                    else if (request.IndexOf("OFF") >= 0)
                    {
                        outD7.Write(false);
                    }
                    string statusText = "Light is " + (outD7.Read() ? "ON" : "OFF") + ".";

                    string response = WebPage.startHTML(statusText, ip);
                    clientSocket.Send(System.Text.Encoding.UTF8.GetBytes(response));
                }
                clientSocket.Close();
            }

public static string startHTML(string ledStatus, string ip)
        {
            string code = "<html><head><title>Netduino Home Automation</title></head><body> <div class=\"status\"><p>" + ledStatus + " </p></div>        <div class=\"switch\"><p><a href=\"http://" + ip + "/ON\">On</a></p><p><a href=\"http://" + ip + "/OFF\">Off</a></p></div></body></html>";
            return code;
        }

这很好用,所以我写了一个完整的 jquery 移动网站来代替简单的 html。这个网站存储在设备的 SD 卡上,使用下面的代码,应该写完整的网站来代替上面的简单 html。

但是,我的问题是 netduino 只将单个 HTML 页面写入浏览器,没有 HTML 中引用的 JS/CSS 样式文件。我怎样才能确保浏览器读取所有这些文件,作为一个完整的网站?

我为从 SD 读取网站而编写的代码是:

private static string getWebsite()
        {
            try
            {
                using (StreamReader reader = new StreamReader(@"\SD\index.html"))
                {
                    text = reader.ReadToEnd();
                }
            }
            catch (Exception e)
            {
                throw new Exception("Failed to read " + e.Message);
            }

            return text;
        }

我将字符串代码=“等位替换为

string code = getWebsite();
4

1 回答 1

0

我怎样才能确保浏览器读取所有这些文件,作为一个完整的网站?

不是已经了吗?使用像Fiddler这样的 HTTP 调试工具。正如我从您的代码中读到的,您listenerSocket应该在端口 80 上进行侦听。您的浏览器将首先检索getWebsite调用结果并解析 HTML。

然后它会触发更多请求,因为它会在您的 HTML 中找到 CSS 和 JS 引用(未显示)。从您的代码中可以看出,这些请求将再次收到getWebsite调用的结果。

您需要解析传入的 HTTP 请求以查看正在请求的资源。HttpListener如果您运行的 .NET 实现支持该类(并且似乎支持) ,它会变得容易得多。

于 2013-08-06T08:07:12.237 回答