使用HTTP POST / PUT通过no-ip问题

时间:2016-01-05 22:37:52

标签: android html http arduino

我有一个项目,我通过WAN使用Android应用程序控制我家的Arduino。我正在使用麻省理工学院的App Inventor来设计应用程序,我正在使用HTTP PUT / POST(我已尝试过两者)将信息字符串“helloThere”发送到Arduino。在直接向我的IP地址和端口号广播时,一切都很好。这是Arduino输出(我已经说明了我的IP和端口):

PUT / HTTP/1.1
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.4.4; GT-I9305 Build/KTU84P)
Host: xx.xx.xx.xx:xxxx
Connection: Keep-Alive
Accept-Encoding: gzip
Content-Type: application/x-www-form-urlencoded
Content-Length: 10

helloThere

当我使用DDNS(no-ip)来引用我的IP地址时(因为它是动态的),会出现问题。出于某种原因,当通过此中继时,PUT / POST请求不会被执行。使用DDNS时,Arduino的输出如下所示:

GET / HTTP/1.1
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.4.4; GT-I9305 Build/KTU84P)
Host: xx.xxx.xx.xx:xxxx
Connection: Keep-Alive
Accept-Encoding: gzip

不知何故,它正在改为GET请求而不是PUT / POST,但它仍在联系设备。我会说实话,我不是网络人,所以我对此感到很困惑,DDNS是不是应该传递给你的任何东西?我已经环顾四周,找不到任何相关内容,任何帮助或解释都会受到赞赏。

编辑:经过大量的进一步研究后,我发现DDNS服务器在查询时实际上返回了所需主机名的IP地址。有没有人知道没有ip用来做这个的地址和端口?我知道windows使用“NSLOOKUP”来执行此操作,但我不知道如何在arduino上实现这一点。它可以通过UDP或HTTP。再一次,任何有此领域经验的人的帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

好吧,最后为那些感兴趣的人解决了这个问题。这是检索ip的Arduino代码:

DataRow workRow;
dataGridViewSorted.Columns.Add("house");
dataGridViewSorted.Columns["house"].DataType = typeof(string);
dataGridViewSorted.Columns.Add("VOLUME");
dataGridViewSorted.Columns["VOLUME"].DataType = typeof(double);

foreach (DataRow row in dataGridViewData.Rows)
{
    workRow = dataGridViewSorted.NewRow();
    workRow["house"] = row["house"].ToString();
    if (row["VOLUME"] == DBNull.Value) {
        //fixes null value error
        row["VOLUME"] = 0; 
    } 
    workRow["VOLUME"] = Convert.ToDouble(row["VOLUME"].ToString());
    dataGridViewSorted.Rows.Add(workRow);
}



        foreach (DataRow row in dataGridViewData.Rows)
        {
            tempHouse = (string)row["house"];
            tempHouse = tempSecurity.Substring(tempHouse.IndexOf(" ") + 1, 2);
            //creates DataItem for the collection based on house and volume
            MV.pieData.Add(Shadow_App.MainView.DataItem.createDataItem(tempHouse, Convert.ToDouble((string)row["VOLUME"])));
        }