Arduino WiFi屏蔽后头问题



我试图做一个帖子从arduino wifi屏蔽到我的java servlet。servlet函数与url get,和jquery post,但我不能排序在我的arduino代码的头。任何帮助将非常感激!

服务器返回200,但是我没有得到有效负载"content"作为值。我不确定我做错了什么,但我很确定这是我的头是如何设置的。我花了整整两天的时间想弄到它。

#include <SPI.h>
#include <WiFi.h>
char ssid[] = "jesussavesforjust19.95"; //  your network SSID (name) 
char pass[] = "********";    // your network password (use for WPA, or use as key for WEP)
int keyIndex = 0;            // your network key Index number (needed only for WEP)
int status = WL_IDLE_STATUS;
IPAddress server(192,168,10,149);  // numeric IP for Google (no DNS)
WiFiClient client;
void setup() {
  Serial.begin(9600);
  // attempt to connect to Wifi network:
  while ( status != WL_CONNECTED) { 
    Serial.println("Attempting to connect to SSID: ");
    Serial.println(ssid);
    status = WiFi.begin(ssid, pass);
    // wait 10 seconds for connection:
    delay(10000);
  } 
  Serial.println("Connected to wifi");
  printWifiStatus();
  sendData("0600890876");
}
void loop() {
  // if there's incoming data from the net connection.
  // send it out the serial port.  This is for debugging
  // purposes only:
  if (client.available()) {
    char c = client.read();
    Serial.println(c);
  }
  //String dataString = "060088765";
  // if you're not connected, and ten seconds have passed since
  // your last connection, then connect again and send data: 
  if(!client.connected())
  {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    //sendData(dataString);
    for(;;)
        ;
  }
}
// this method makes a HTTP connection to the server:
void sendData(String thisData) {
  // if there's a successful connection:
  Serial.println("send data");
  if (client.connect(server, 8080)) {
    String content = "value=0600887654";
    Serial.println(content);
    Serial.println("connected");
    client.println("POST /hos HTTP/1.1");
    client.println("Host:localhost");
    client.println("Connection:Keep-Alive");
    client.println("Cache-Control:max-age=0");
    client.println("Content-Type: application/x-www-form-urlencodedn");
    client.println("Content-Length: ");
    client.println(content.length());
    client.println("nn");
    client.println(content);
  } 
  else {
    // if you couldn't make a connection:
    Serial.println("form connection failed");
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  }
}

void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.println("SSID: ");
  Serial.println(WiFi.SSID());
  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.println("IP Address: ");
  Serial.println(ip);
  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.println("signal strength (RSSI):");
  Serial.println(rssi);
  Serial.println(" dBm");
}

也许,你的一些"Serial "。打印"one_answers"客户端。println"命令应该是"Serial "。打印"one_answers"客户端。打印"。例如:

客户端。内容长度打印(":");

client.println (content.length ());

将避免在文本和数字之间添加换行符。

这可能是对一种方法的建议,而不是答案。

如果我在做这样的事情,我不会在Arduino上开始。没完没了的编译、下载、运行、查看print()会把我逼疯。我将完全原型客户端/服务器交互在任何你有在你的指尖,最好有调试器的东西。(Java, Python, PHP, VB,无论你知道什么,你可以拼凑在一起)

第二,我会在服务器上运行Wireshark,这样我就可以确切地看到发送和响应的内容。

然后我会将相同的交互移植到Arduino上。再次检查与Wireshark,以确认您得到您所期望的。如果你发送相同的字节,你应该得到相同的响应。


即使您选择直接在Arduino上实现,也可以考虑使用Wireshark来捕获实际的网络流量。

使用Wireshark,您可能会看到Arduino println()没有向服务器发送正确的行结束。

同样,也不能保证最后一个println()确实被发送了。网络堆栈实现可以自由地进行缓冲,因为它认为合适。您可能需要一个flush()。数据包跟踪将显示这一点。

对于数据包捕获,您可能会发现时间很重要。理论上,TCP是一个流,您应该能够在一个数据包中每次发送1个字符的POST数据,并且一切都可以工作。但是根据服务器的标准,Arduino执行println()的速度太慢,可能会超时。在这种情况下,你会看到服务器响应之前,Arduino甚至完成发送。

相关内容

  • 没有找到相关文章

最新更新