Honlap kódból adat kinyerése.

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
kukuri
Bitmanipulátor
Hozzászólások: 132
Csatlakozott: 2014. január 20. hétfő, 12:50

Honlap kódból adat kinyerése.

Hozzászólás Szerző: kukuri »

Üdvözletem!

Adott egy UNO + ethernetshield. Cliens módban adatokat küldök egy szerverre. A visszaérkező adatokat pedig szeretném feldolgozni.
Mivel a sram véges ezért megkérdezném, hogy miként lehet ideglenesen elmenteni a visszaérkező adatokat hogy a részemre szükséges adatokat kiszedjem belőle?

Az oldal kódja ami visszaküldésre kerül:

HTTP/1.1 200 OK
Date: Sat, 27 Sep 2014 19:44:09 GMT
Server: Apache/2.2.23 (CentOS)
X-Powered-By: PHP/5.2.17
Content-Length: 32
Connection: close
Content-Type: text/html; charset=UTF-8

12345678901234567890123456789000

A fejlécből kiderül hogy az adat ami nekem kell 32byte méretű. Jelen esetben a "12345678901234567890123456789000" Viszont nem tudom hogyan kezeljem le. String változót nem használhatok mert az túl rövid. Több 100byte helyet meg nem szívesen foglalnák le.
Esetleg figyeljem a Content- Type: sort és utána kezdjem el menteni az adatokat?

Vagy egy másik lehetőség hogy az egészet szépen sd kártyára kiiratom és amikor megvan a teljes letöltés akkor keresek benne.

Hogy szokták ezt szépen memóriahatékonyan feldolgozni?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Honlap kódból adat kinyerése.

Hozzászólás Szerző: Robert »

Ahogy én csinálnám:
Keresem az ENTER-t (\n)
Az _utána_ jövő válasz tudod hogyan kezdődik? nézd a kerektereket és ha az első 3 egyezik, fogadd el. A válasz nálam valami ilyesmi:
OK:státuszkód

Innen az ENTER után a szövegláncban az 1..3. karakter OK:
Csak ezt a karakterláncot tartom meg.

Hátulütő: a OK: után csak 32...120 ASCII kódok jöhetnek, ENTER nem.
kukuri
Bitmanipulátor
Hozzászólások: 132
Csatlakozott: 2014. január 20. hétfő, 12:50

Re: Honlap kódból adat kinyerése.

Hozzászólás Szerző: kukuri »

Úgy látszik megoldottam a segítségeddel.
Mivel a fejléc után 2db enter van így a következőképpen oldottam meg az enterek ellenőrzését. (13,10,13,10)

Kód: Egész kijelölése

char enter[4]={0,0,0,0};
char elfogadva=0;

void loop()
{
  if (client.available()) 
  {
    char c = client.read();
    Serial.print(c);
    if(!elfogadva)
    {
      enter[0]=enter[1];
      enter[1]=enter[2];
      enter[2]=enter[3];
      enter[3]=c;
      if(enter[0]==13 && enter[1]==10 && enter[2]==13 && enter[3]==10)
      {
        elfogadva=1;
      }
    }
    else
    {
      if(adat_http.length()<23)
      {
        adat_http=adat_http+c;
      }
    }
  }
   kimenet=adat_http;
  if (!client.connected())
  {
    elfogadva=0;
}
A 24 byte méretű String jelenleg elég.

A jelenlegi feladathoz legalábbis.
Adatokat küldök egy szerverre és a visszatérő adatok tartalmazzák a kimeneteim állapotát. Így egy karakterrel 4 kimenetem állapotát be tudom állítani.

Valószínűleg beteszek még egy azonosítót is hogy tudjam milyen adatokat kapok vissza. De ez már megy ha idáig eljutottam. :)
Válasz küldése