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

[C++]FTP Upload/Download Możliwe ?

Ostatnio zmodyfikowano 2012-08-11 22:51
Autor Wiadomość
krystian11102
Temat założony przez niniejszego użytkownika
[C++]FTP Upload/Download Możliwe ?
» 2012-08-10 22:33:44
Witam.. Zaszła mnie chcęć pisania komunikatora (jeszcze nie wiem .. W winapi lub konsola) i mam problem.. Nie znam WinSock(jak ktoś zna kurs PL to bym prosił (nie znam Angielskiego tak bardzo abym czytał ze zrozumieniem) ) .. I szukam jak najłatwiejszego sposobu komunikatora..
Tak sobię żebym pisał z kumplem i dla ciekawostki..
Chodzi mi o to aby:

Mamy ten sam program.. On wpisuje:
Siema co tam.?
U mnie:
Siema co tam.?
i jak do niego napisze żeby też się wyświetlało ..
Pewnego wieczoru gdy już sobię leżałem pomyślałem trochę nad tym ii...
Doszedłem do wniosku żeby zrobic coś takiego żeby wysyłał plik na serwer np. rozmowa1.txt
a u drugiej osoby program czekał i jak plik się wgra u osoby 1(u mnie) to wyświetla się u niej czyli pobiera do tego samego katalogu gdzie jest program i odczytywał następną linijkę.. :D
Czy coś takiego jest możliwe ? :D
P-62191
anonim
» 2012-08-10 22:46:34
kurs winsock to masz na tej stronie nawet w zakładce kursy
P-62193
krystian11102
Temat założony przez niniejszego użytkownika
Wiem :D
» 2012-08-10 22:49:01
Tak wiem, próbowałem ale nic nie szło.. Tzn. co chwilę błędy kompilacji :D nawet jeśli kopiowałem na "żywca" :D .. Spróbuję jeszcze raz tego winsock ... A w winapi się nie da? nie ma żadnej takiej biblioteki ? ; D
P-62194
yoogi
» 2012-08-10 22:52:01
Do pobrania pliku możesz użyć http. Jeżeli używasz Windowsa to przyda ci się to:

C/C++
#include <Windows.h>
#include <Wininet.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <tlhelp32.h>
#include <string>
#include <process.h>
#include <vector>
#include <string>
#include <fstream>

#pragma comment(lib,"Wininet.lib")

using namespace std;

HINTERNET netstart()
{
    const HINTERNET handle = InternetOpenW( 0, INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 );
    if( handle == 0 )
    {
        const DWORD error = GetLastError();
        cerr << "InternetOpen(): " << error << "." << endl;
    }
    return( handle );
}

void netclose( HINTERNET object )
{
    const BOOL result = InternetCloseHandle( object );
    if( result == FALSE )
    {
        const DWORD error = GetLastError();
        cerr << "InternetClose(): " << error << "." << endl;
    }
}

HINTERNET netopen( HINTERNET session, LPCWSTR url )
{
    const HINTERNET handle = InternetOpenUrlW( session, url, 0, 0, 0, 0 );
    if( handle == 0 )
    {
        const DWORD error = GetLastError();
        cerr << "InternetOpenUrl(): " << error << "." << endl;
    }
    return( handle );
}

void netfetch( HINTERNET istream, ostream & ostream )
{
    static const DWORD SIZE = 1024;
    DWORD error = ERROR_SUCCESS;
    BYTE data[ SIZE ];
    DWORD size = 0;
    do
    {
        BOOL result = InternetReadFile( istream, data, SIZE, & size );
        if( result == FALSE )
        {
            error = GetLastError();
            cerr << "InternetReadFile(): " << error << "." << endl;
        }
        ostream.write(( const char * ) data, size );
    }
    while(( error == ERROR_SUCCESS ) &&( size > 0 ) );
   
}


int Download( WCHAR * url, string path )
{
    const HINTERNET session = netstart();
    if( session != 0 )
    {
        const HINTERNET istream = netopen( session, url );
        if( istream != 0 )
        {
            ofstream ostream( path.c_str(), ios::binary );
            if( ostream.is_open() )
            {
                netfetch( istream, ostream );
            }
            else
            {
                return 1;
            }
            netclose( istream );
        }
        netclose( session );
    }
    return 0;
}

std::wstring StringToWString( const std::string s )
{
    std::wstring temp( s.length(), L' ' );
    std::copy( s.begin(), s.end(), temp.begin() );
    return temp;
}

int main( int argc, char * argv[] )
{
    if( argc != 3 ) return 1;
   
    string fname = argv[ 1 ];
    string fs = argv[ 2 ];
    Download(( WCHAR * ) StringToWString( fname ).c_str(), fs.c_str() );
    return 0;
}

Którym już wielokrotnie się chwaliłem na forum :) do pobrania też używałem kiedyś Wininet'u
P-62195
krystian11102
Temat założony przez niniejszego użytkownika
» 2012-08-10 23:02:48
Myślałem że ogarnę kod xD Ale teraz widzę że jestem zielony ;D
Używam windows 7.. Dodałem wszystkie bibliotek, nie ruszając kodu (zaraz powiem dlaczego), skompilował się normalnie .. Ale po chwili wyświetla się komunikat:

"Program Komunikatorek.exe przestał działać.
System Windows może wyszikać rozwiązanie tego problemu w trybie online"...

A Szczegóły problemu:
--------------------------------------------------------
Podpis problemu:
  Nazwa zdarzenia problemu: APPCRASH
  Nazwa aplikacji: komunikatorek.exe
  Wersja aplikacji: 0.0.0.0
  Sygnatura czasowa aplikacji: 502575c2
  Nazwa modułu z błędem: ntdll.dll
  Wersja modułu z błędem: 6.1.7600.16915
  Sygnatura czasowa modułu z błędem: 4ec49caf
  Kod wyjątku: c0000005
  Przesunięcie wyjątku: 0002f963
  Wersja systemu operacyjnego: 6.1.7600.2.0.0.256.1
  Identyfikator ustawień regionalnych: 1045
  Dodatkowe informacje 1: 34cb
  Dodatkowe informacje 2: 34cbe11322d44489f2bc951d668581d5
  Dodatkowe informacje 3: 610f
  Dodatkowe informacje 4: 610fe1ba319fc943653f83c3991b15be

Przeczytaj w trybie online nasze zasady zachowania poufności informacji:
  http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0415

Jeśli zasady zachowania poufności informacji w trybie online nie są dostępne, przeczytaj nasze zasady zachowania poufności informacji w trybie offline:
  C:\Windows\system32\pl-PL\erofflps.txt

-----------------------------------------------------------------

O co może chodzić ? ;D
Aaa.. I nie wiem gdzie Url wpisać do kodu aby pobrał plik.. xD
P-62198
yoogi
» 2012-08-10 23:07:29
Tutaj podajesz nazwe pliku w command line. Włącz cmd -> przejdź do katalogu z aplikacją i napisz mojaaplikacja.exe http://google.pl/ C:/users/user/desktop/

Powinno ci pobrać na pulpit
P-62199
krystian11102
Temat założony przez niniejszego użytkownika
» 2012-08-10 23:23:34
Niestety.. Ten sam błąd "Program przestał działać(...)".. Próbowałem też w Microsoft Visual C++ 2010 Express Ale:

------ Build started: Project: komunikatorek, Configuration: Debug Win32 ------
  komunikatorek.cpp
MSVCRTD.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
c:\users\demonidking\documents\visual studio 2010\Projects\komunikatorek\Debug\komunikatorek.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

.. Biblioteki dołączonie więc nie wiem co jest...
P-62200
yoogi
» 2012-08-11 00:05:49
Zły projekt tworzysz, zrób tak: New projekt -> general -> empty projekt
P-62204
« 1 » 2
  Strona 1 z 2 Następna strona