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: #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 ); 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. |
|
malan |
» 2010-02-28 15:34:39 1. http://forum.ddt.pl/?Tid=622 !!! 2. Teksańska masakra piłą mechaniczną. 3. #include <iostream> #include <curl/curl.h> #include <string>
using namespace std;
string recvCode( const string & adres ) { string kod; CURL * curl; curl = curl_easy_init(); curl_easy_setopt( curl, CURLOPT_URL, adres.c_str() ); curl_easy_getinfo( curl, CURLINFO_RESPONSE_CODE, kod.c_str() ); 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; } |
|
harcerz Temat założony przez niniejszego użytkownika |
» 2010-02-28 16:04:34 Dalej dziwnie to działa. Zmieniłem kod tak: #include <iostream> #include <curl/curl.h> #include <string>
using namespace std;
string recvCode( const string & adres ) { string kod; CURL * curl; curl = curl_easy_init(); curl_easy_setopt( curl, CURLOPT_URL, adres.c_str() ); curl_easy_getinfo( curl, CURLINFO_RESPONSE_CODE, kod.c_str() ); curl_easy_perform( curl ); curl_easy_cleanup( curl ); return kod; };
int main() { string adres_do_strony, kod_strony; cout << "podaj adres strony" << endl; 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 -------. |
|
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ć :). |
|
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? |
|
malan |
» 2010-02-28 21:32:24 |
|
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ętowejA tak wygląda kod sterujący LPT #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 };
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 ) ); 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; }
|
|
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. |
|
« 1 » 2 |