Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program w CURL nie działa, choć nie wiem dla czego.

Ostatnio zmodyfikowano 2010-03-02 19:43
Autor Wiadomość
harcerz
Temat założony przez niniejszego użytkownika
Program w CURL nie działa, choć nie wiem dla czego.
» 2010-02-28 15:02:07
Chcę mieć program który będzie pobierał z pliku dane.txt jego zawartość (dokładnie 3 cyfry). Mam taki kod:
C/C++
#include <iostream>
#include <curl/curl.h>
#include <string>


using namespace std;




string recvCode( const string & adres )
{
   
    CURL * curl;
    curl = curl_easy_init();
    char adres_strony[ adres.size() ];
    strcpy( adres_strony,( adres ).c_str() );
   
    curl_easy_setopt( curl, CURLOPT_URL, adres_strony );
    char * kod;
    curl_easy_getinfo( curl, CURLINFO_RESPONSE_CODE, kod ); //pobieramy kod zrodlowy
    curl_easy_perform( curl );
    curl_easy_cleanup( curl );
    return kod;
}



int main()

{
    string adres_do_strony, kod_strony;
   
    cout << "podaj adres strony\n";
    cin >> adres_do_strony;
   
    kod_strony = recvCode( adres_do_strony );
    cout << kod_strony << endl;
   
}
Program się ładnie kompiluje ale gdy go odpalam zawiesza się.
Kod jest zaczerpnięty z pastebin.com/m1fa7beae .Ten oryginalny działa bez zarzutów, ale ja nie chce tylu rzeczy. A po odchudzeniu przestaje działać w ogóle. Proszę o pomoc.
P-14306
malan
» 2010-02-28 15:34:39
1. http://forum.ddt.pl/?Tid=622 !!!
2. Teksańska masakra piłą mechaniczną.
3.
C/C++
#include <iostream>
#include <curl/curl.h>
#include <string>

using namespace std;

string recvCode( const string & adres )
{
    string kod;
    CURL * curl;
    curl = curl_easy_init();
    //char  adres_strony[adres.size()];
    //strcpy(adres_strony, (adres).c_str());
   
    curl_easy_setopt( curl, CURLOPT_URL, adres.c_str() );
    //char * kod;
   
    curl_easy_getinfo( curl, CURLINFO_RESPONSE_CODE, kod.c_str() ); //pobieramy kod zrodlowy
    curl_easy_perform( curl );
    curl_easy_cleanup( curl );
    return kod;
};

int main()
{
    string adres_do_strony, kod_strony;
   
    cout << "podaj adres stronyn";
    cin >> adres_do_strony;
   
    kod_strony = recvCode( adres_do_strony );
    cout << kod_strony << endl;
   
    cin.sync();
    cin.get();
    return 0;
}
P-14309
harcerz
Temat założony przez niniejszego użytkownika
» 2010-02-28 16:04:34
Dalej dziwnie to działa. Zmieniłem kod tak:
C/C++
#include <iostream>
#include <curl/curl.h>
#include <string>

using namespace std;

string recvCode( const string & adres )
{
    string kod;
    CURL * curl;
    curl = curl_easy_init();
    //char  adres_strony[adres.size()];
    //strcpy(adres_strony, (adres).c_str());
   
    curl_easy_setopt( curl, CURLOPT_URL, adres.c_str() );
    //char * kod;
   
    curl_easy_getinfo( curl, CURLINFO_RESPONSE_CODE, kod.c_str() ); //pobieramy kod zrodlowy
    curl_easy_perform( curl );
    curl_easy_cleanup( curl );
    return kod;
};

int main()
{
    string adres_do_strony, kod_strony;
   
    cout << "podaj adres strony" << endl;
    //cin >> adres_do_strony;
    adres_do_strony = "halotaxi.cba.pl/dane.txt";
    kod_strony = recvCode( adres_do_strony );
    string zmienna = kod_strony;
    cout << "------" << endl;
    cout << kod_strony << "test1" << endl;
    cout << zmienna << "test2" << endl;
   
    cin.sync();
    cin.get();
    return 0;
}
i po odpaleniu zmienne "kod_strony i zminna" nic nie wyświetlają. Zawartość dane.txt wyświetla się nad -------.
P-14312
malan
» 2010-02-28 16:15:14
Wynika z tego, że do zmiennej kod nic się nie "zapisało". To, że widzisz na ekranie 14 to zasługa curl_easy_setopt(curl,CURLOPT_URL, adres.c_str());.
Proponowałbym Ci zajrzeć tutaj. Masz tam gotowy kod - wystarczy trochę przerobić :).
P-14315
harcerz
Temat założony przez niniejszego użytkownika
» 2010-02-28 16:20:46
Hehe, już czytałem tamten temat. Tylko dostaje oczopląsu. Który z kodów na tamtej stronie robi to co chce?
P-14317
malan
» 2010-02-28 21:32:24
http://archiwum.ddt.pl/?GroupId=5541.
Jak będę miał czas to mogę Ci go przerobić (jeśli sobie nie poradzisz) ;p.
P-14355
harcerz
Temat założony przez niniejszego użytkownika
» 2010-02-28 21:59:36
Nie radze sobie :/ Był bym wdzięczny za pomoc. Miałem ambitny jak dla mnie pomysł ale nie wychodzi mi to. Plan był taki:
dwie aplikacje, jedna w c++ oraz jedna w php. Ta w php dostępna tutaj (pass: test) zapisuje do pliku dane.txt ustawienia, a ta w C++ odczytuje tą wartość i wysyła do portu LPT. Całość działa tylko gdy aplikacja sterująca portem jest razem z plikiem dane.txt. Taka sytuacja wymaga zainstalowanego serwera www/php na na komputerze. Więc chciałem aby można było pobrać wartość z zewnętrznego serwera.
Może ktoś ma jakieś pomysły co do tego? 


Tak to miało być wykonywane od strony sprzętowej

A tak wygląda kod sterujący LPT
C/C++
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <fstream>
#include <cstdlib>
#include <curl.h>

const BYTE iocode[] = { 0x66, 0x8B, 0x54, 0x24, 0x04, 0x31, 0xC0, 0xEC, 0xC3, 0x90, 0x90, 0x90,,\
     0x66, 0x8B, 0x54, 0x24, 0x04, 0x8A, 0x44, 0x24, 0x08, 0xEE, 0xC3 };
/*
_inp: // word port
   mov dx,[esp+4]
   xor eax,eax
   in al,dx
   ret

align 4
_outp: // word port, byte value
   mov dx,[esp+4]
   mov al,[esp+8]
   out dx,al
   ret
*/

extern "C" {
    typedef BYTE( __cdecl * IOIN )( int port );
    typedef void( __cdecl * IOOUT )( int port, int val );
}
using namespace std;
int main( void )
{
    printf( "inicjacja drivera...\n" );
    CloseHandle( CreateFile( "\\\\.\\UserPort", GENERIC_READ, 0,
    NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ) );
   
    printf( "alokacja pamieci dla funkcji...\n" );
    IOIN inp =( IOIN ) VirtualAlloc( 0, 32, MEM_COMMIT, PAGE_EXECUTE_READWRITE );
    IOOUT outp =( IOOUT )(( int ) inp + 12 );
   
    printf( "kopiowanie kodu...\n" );
    memcpy(( void * ) inp, & iocode, sizeof( iocode ) );
   
    // opcjonalnie ustaw domyślne prawa
    printf( "zmiana praw na read+execute...\n" );
    VirtualProtect(( LPVOID ) inp, 32, PAGE_EXECUTE_READ, NULL );
   
    int pp, in, in1 = 1;
   
    printf( "Zaczynam nasluchiwac ....\n" );
   
    Sleep( 5000 );
    for(;; )
    {
        ifstream plik( "dane.txt" );
        plik >> in;
        system( "cls" );
        outp( 888, in );
        printf( " - stan portu 888:%d\n", inp( 888 ) );
        Sleep( 500 );
        pp++;
       
    }
   
    printf( "zwalnianie pamieci...\n" );
    VirtualFree(( LPVOID ) inp, 32, MEM_RELEASE );
    printf( "ok!...\n\n" );
    system( "pause" );
    return 0;
}
P-14360
DejaVu
» 2010-02-28 22:32:17
Musisz mieć funkcję odpowiedzialną za odczytywanie danych. Przykład masz pod linkiem, który Ci już malan podał. Jest tam trochę śmieci w tym kodzie, ale jest tam wszystko czego porzeba do pobrania pliku. Kod nie jest długi, więc dużo czasu Ci nie zajmie rozpracowanie co do czego jest.
P-14367
« 1 » 2
  Strona 1 z 2 Następna strona