Sida 1 av 2
arduino ethernet problem
Postat: 25 november 2011, 08:52:56
av farbrorlarry
Hej.
Jag försöker att få till arduino att skicka in lite värden till min webbserver, dock verkar vi inte komma helt överens. Gjort lite småförändringar bara i exempel koden för pachubestring som följer med utvecklings miljön. Typ ip-adress o lite sådana små saker. Men när den postar in saker:
Kod: Markera allt
client.print("PUT /api/XXXXX.csv HTTP/1.1\n"); // send the HTTP PUT request. Change x's to your feed
client.print("Host: www.pachube.com\n"); // fill in your feed address here:
client.print("X-PachubeApiKey: <<<<<API KEY HERE>>>>>>\n"); // fill in your Pachube API key here:
client.print("Content-Length: ");
client.println(thisData.length(), DEC);
// last pieces of the HTTP PUT request:
client.print("Content-Type: text/csv\n");
client.println("Connection: close\n");
// here's the actual content of the PUT request:
client.println(thisData);
Ser alla strängar som skickats in i typ client.print("Content-Length: "); ok ut medans client.println(thisData); blir konstigt när man kollar med ngrep, som om de vart radbrutna efter varje tecken. Skriver jag ut motsvarande på serial istället går det bra. Ser även rätt ut när jag tar emot det med nc som mottagare istället för apache(fast ngrep visar fortfarande radbrytningarna). Kör jag det som en char array går det bra. Någon som har förslag? Jag har även testat ett annat exempel som verkar fungera men den gör egentligen samma sak men anropas inte det som en funktion. Vilket inte borde påverka. Någon annan som testat detta exempel som kan verifiera samma problematik?
Re: arduino ethernet problem
Postat: 25 november 2011, 09:16:11
av sodjan
Vad säger Apache loggarna ?
Re: arduino ethernet problem
Postat: 25 november 2011, 09:26:00
av farbrorlarry
"request failed: error reading the headers"
Jag kan alltså ta emot requesten med "nc -l 80" klippa ut det, och skicka in det till apachen med telnet och det blir ok
Skall ta en tcpdump på det så kan man kolla exakt vad den skickar för byte efter varje tecken.
Re: arduino ethernet problem
Postat: 25 november 2011, 09:27:35
av sodjan
OK.
Har inte Apache någon trace eller debug funktion som också
loggar vad den faktiskt "ser" från klienten ?
Re: arduino ethernet problem
Postat: 25 november 2011, 10:05:39
av 6502
Logga med Wireshark så ser du exakt vad som skickas på trådarna.
Re: arduino ethernet problem
Postat: 25 november 2011, 10:50:59
av sodjan
Applikationens (i detta fall Apache) egen log är oftast mycket
bättre därför att den dels enbart visa det som är rellevant (d.v.s det
som har med applikationen att göra), dels ofta visar/formatterar det på
ett för applikationen rellevant sätt, kanske till och med direkt pekar
ut problemet. Vad som "skickas på trådarna" är mindre intressant, det
är det som Apache ser/upplever som gäller.
Re: arduino ethernet problem
Postat: 25 november 2011, 11:58:34
av farbrorlarry
http://larrys.mine.nu/test.pcap
Hade visst den igång. Borde skicka tror jag:
POST /cgi-bin/getfamous.pl HTTP/1.1
Content-Type: application/x-www-form
Host:
www.test.org
Content-Length: 15
drdata=abcd1234
Men som man ser i wireshark skickar den någon form av malformed packet. Content-Length och drdata kommer från en String.
Re: arduino ethernet problem
Postat: 25 november 2011, 13:25:41
av farbrorlarry
Lite text från tcpdump
Kod: Markera allt
00000000 50 4f 53 54 20 2f 63 67 69 2d 62 69 6e 2f 67 65 POST /cg i-bin/ge
00000010 74 66 61 6d 6f 75 73 2e 70 6c 20 48 54 54 50 2f tfamous. pl HTTP/
00000020 31 2e 31 1.1
00000023 0d .
00000024 0a .
00000025 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 61 70 Content- Type: ap
00000035 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 77 77 77 2d plicatio n/x-www-
00000045 66 6f 72 6d form
00000049 0d .
0000004A 0a .
0000004B 48 6f 73 74 3a 20 77 77 77 2e 74 65 73 74 2e 6f Host: ww w.test.o
0000005B 72 67 rg
0000005D 0d .
0000005E 0a .
0000005F 43 C
00000060 6f o
00000061 6e n
00000062 74 t
00000063 65 e
00000064 6e n
00000065 74 t
00000066 2d -
00000067 4c L
00000068 65 e
00000069 6e n
0000006A 67 g
0000006B 74 t
0000006C 68 h
0000006D 3a :
0000006E 20
0000006F 31 1
00000070 35 5
00000071 0d .
00000072 0a .
00000073 64 d
00000074 72 r
00000075 64 d
00000076 61 a
00000077 74 t
00000078 61 a
00000079 3d =
0000007A 61 a
0000007B 62 b
0000007C 63 c
0000007D 64 d
0000007E 31 1
0000007F 32 2
00000080 33 3
00000081 34 4
00000082 0d .
00000083 0a .
00000084 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 63 6c 6f 73 Connecti on: clos
00000094 65 0a e.
00000096 0d .
00000097 0a .
Koden
http://larrys.mine.nu/famous_b01.pde
Re: arduino ethernet problem
Postat: 25 november 2011, 14:27:40
av sodjan
> Lite text från tcpdump
Jaha, och vad är fel ?
Har du någon "likare" att jämföra med ?
Re: arduino ethernet problem
Postat: 25 november 2011, 15:03:44
av farbrorlarry
Alla tecken som är ensamma på en rad borde vara på samma som någon annan.
Re: arduino ethernet problem
Postat: 25 november 2011, 15:19:39
av sodjan
Vad får dom att ligga på olika rader ?
Kommer de i separata IP packet ?
Re: arduino ethernet problem
Postat: 25 november 2011, 19:06:37
av farbrorlarry
Jajamensan
Re: arduino ethernet problem
Postat: 25 november 2011, 19:12:13
av Maalobs
Spela in ett fungerande anrop från en dator med Wireshark, och jämför det mot inspelningen av det icke-fungerande anropet.
Re: arduino ethernet problem
Postat: 27 november 2011, 16:34:25
av farbrorlarry
Har inte så mycket nytta av det, syns ju att trafiken inte är rätt. Gjort lite ändringar så tar apachen emot datat, dock inte rätt på snöret. Skall göra om den biten senare, gissar att en brandvägg tex med lite kvalité på inte tillåter trafiken igenom. Borde vara relativt enkelt o fixa bara man sätter sig in vad de gjort. Alternativt är att konvertera allt till en array innan man skickar till ethernetmodulen.
Re: arduino ethernet problem
Postat: 27 november 2011, 21:16:57
av xevz
HTTP använder sig av CRLF för radavslutning i headers, inte LF.
http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html
Är kanske inte problemet här dock (Apache kan vara förlåtande), men det är värt att tänka på.