JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Upload[FTP]&Download[DB]
Gehe zu Seite 1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 17.01.2006, 15:28    Titel: Upload[FTP]&Download[DB] Antworten mit Zitat

Hi,

ich arbeite mich grad so ein bisschen in Netzwerktechniken ein bzw. Kommunikation mit dem Internet.
Dabei sind mir vorerst hauptsächlich die Funktionen Dateiupload auf einen FTP-Server und Datenaustausch mit einer Datenbank wichtig.

Was wäre hier für C++ am besten geeignet? Ich hab auch in google und der MSDN danach gesucht. Allerdings konnte ich bisher aus den Codes&References herauslesen, ob sowas damit(Winsock/Win32NetAPI/MCI) möglich ist. Wichtig ist auf jeden Fall, dass es keine normalen "HTTP-Abfragen" sind, sondern eben über FTP und Datenbanken.

Wäre nett, wenn mir jemand da weiterhelfen könnte, was hier die beste Wahl ist Smile
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
PeaceKiller
JLI Master


Alter: 36
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 17.01.2006, 15:36    Titel: Re: Upload[FTP]&Download[DB] Antworten mit Zitat

The Lord of Programming hat Folgendes geschrieben:
Hi,

ich arbeite mich grad so ein bisschen in Netzwerktechniken ein bzw. Kommunikation mit dem Internet.
Dabei sind mir vorerst hauptsächlich die Funktionen Dateiupload auf einen FTP-Server und Datenaustausch mit einer Datenbank wichtig.

Was wäre hier für C++ am besten geeignet? Ich hab auch in google und der MSDN danach gesucht. Allerdings konnte ich bisher aus den Codes&References herauslesen, ob sowas damit(Winsock/Win32NetAPI/MCI) möglich ist. Wichtig ist auf jeden Fall, dass es keine normalen "HTTP-Abfragen" sind, sondern eben über FTP und Datenbanken.

Wäre nett, wenn mir jemand da weiterhelfen könnte, was hier die beste Wahl ist Smile


Willst du dir das selber Programmieren oder brauchst du fertige Bibliotheken?
Für Dateitransfers ist denke ich libcurl gut geeignet. Mit Winsock kannst du natürlich jedes Protokoll selber nachprogrammiern, was aber nicht sehr empfehlenswert ist.
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 17.01.2006, 15:49    Titel: Antworten mit Zitat

Danke.
Wenns kostenlos ist, nehme ich notfalls auch eine fertige Bibliothek.

Zitat:
Mit Winsock kannst du natürlich jedes Protokoll selber nachprogrammiern

Aber was glaubst du ist an Winsock so unempfehlenswert?
(Und wieviele sind alle Protokolle, ich kenne mich da nicht so besonders aus Razz)
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
sp3cK-r0LL3
Senior JLI'ler


Alter: 34
Anmeldedatum: 18.06.2004
Beiträge: 275

Medaillen: Keine

BeitragVerfasst am: 17.01.2006, 15:54    Titel: Antworten mit Zitat

für datenbanktransfer mit vor allem sql empfehel ich qt: hab als programmierneuling eigentlich alles hinbekommen, also abfragen, daten senden, verändernund anzeigen lassen...

(jaja ich weiß ich kann nur mit qt aber ich finds toll Wink )
_________________
sex is updatedb; locate; talk; date; cd; strip; look; touch; finger; unzip; uptime; gawk; head; apt-get install condom; mount; fsck; gasp; more; yes; more; umount; apt-get remove --purge condom; make clean; sleep
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PeaceKiller
JLI Master


Alter: 36
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 17.01.2006, 15:59    Titel: Antworten mit Zitat

Schau dir mal das OSI-Modell an.

Winsock entspricht Schicht 4. FTP und http sind eigentlich nur Spezifikationen wie die Pakete über (hier) winsock verschickt werden, damit die Gegenseite die gleiche Sprache spricht wie dein Programm.

Die meisten Protokolle sind in RFCs spezifiziert:
IRC, FTP, HTTP, ...

Wie du siehst sind die Teile ziemlich lang und um so etwas selber bugfrei zu implementieren braucht man wahrscheinlich eine ganze Weile.

sp3cK-r0LL3 hat Folgendes geschrieben:
für datenbanktransfermit vor allem sql empfehel ich qt: hab als programmierneuling eigentlich alles hinbekommen, also abfragen, daten senden, verändernund anzeigen lassen...

(jaja ich weiß ich kann nur mit qt aber ich finds toll Wink )


Das ist totaler Overkill.
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 17.01.2006, 16:09    Titel: Antworten mit Zitat

Für Windows empfehle ich: Win32INetAPI! Such mal in der MSDN nach FtpGetFile usw. Samples sind alle da usw. Mit der Win32INetAPI kannst Du eigentlich alles machen.

Wenn noch Datenbanken dazu kommen: ODBC Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
abc_d
JLI Master Trainee


Alter: 35
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 17.01.2006, 17:42    Titel: Antworten mit Zitat

Ich würde das eher von einer höheren schicht als TCP anpacken, wenn es nur für Windows ist, mit der WinApi.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 17.01.2006, 20:13    Titel: Antworten mit Zitat

Vielen Dank für eure Meinungen, ich werde mir diese Funktionen/Libs mal näher ansehen Smile

BlackLordOfDragons hat Folgendes geschrieben:
Ich würde das eher von einer höheren schicht als TCP anpacken, wenn es nur für Windows ist, mit der WinApi.

Meinst du mit "WinAPI" jetzt die WinAPI oder die WinINetAPI? Surprised
Welches von den Methoden hat jetzt direkt mit TCP zu tun und was bedeutet das für mich (bzw. für mein Programm)?
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
abc_d
JLI Master Trainee


Alter: 35
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 17.01.2006, 21:09    Titel: Antworten mit Zitat

Sry, ich habe mit der WinApi nicht viel am Hut, aber ich denke das die WinInet Api ein Teil der Win Api ist, auf jedenfall habe ich auch schon FTP und HTTP Funktionen in WinApi Programmen gesehen. Ob das stimmt wird Patrick sicher bald posten ,)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 17.01.2006, 21:26    Titel: Antworten mit Zitat

Korrekt.

Die Win32INetAPI ist eine weitere API neben der Win32API, die ausschließlich (wie der Name schon sagt) allein für InterNet zuständig ist. Sie bietet alles was man braucht: HTTP, FTP und Gopher.

Der Internetexplorer (Also das Kernmodul) und sogar selbst Opera wurden damit programmiert.

Für eine Applikation benötigt man als 1. die <wininet.h> und die wininet.lib.

Nachdem man 2. Handles bereitgestellt hat für einmal die Internetverbindung und einmal die FTP Verbindung
CPP:
    void*       connection_internet_;   // Internetverbindung
    void*       connection_ftp_;        // FTP-Verbindung


Muss die Internetverbindung für die Applikation aufgebaut werden bzw. registriert werden wenn schon eine besteht. Dann wird die FTP Verbindung eröffnet
CPP:
bool ftp::connect (const wchar_t* application_name, const wchar_t* host, const wchar_t* user, const wchar_t* pass, unsigned long port, wchar_t* out)
{
        // Internetverbindung durch das Programm aufbauen
    if ((connection_internet_ = ::InternetOpenW (application_name, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0)) == NULL)
    {
            // Es gab einen Fehler, gibt es eine Adresse zu einem Fehlertextbuffer?
        if (out) ::swprintf(out, L"InternetOpenW failed");

            // Funktion abbrechnen
        return (false);
    }

        // Zum FTP-Server verbinden
    if ((connection_ftp_ = ::InternetConnectW (connection_internet_, host, static_cast<unsigned short>(port), user, pass, 1, 0, 0/*(DWORD_PTR)&StatusFunc*/)) == NULL)
    {
            // Es gab einen Fehler, gibt es eine Adresse zu einem Fehlertextbuffer?
        if (out) ::swprintf(out, L"InternetConnectW failed");

            // Funktion abbrechnen
        return (false);
    }

        // Alles roger!
    return (true);
}


Eine Recieverfunktion kann man auch hier als letzten Parameter setzen. Dazu aber später.

Wo eine Verbindung besteht muss auch eine gelöst werden, nach dem Motto: Die Letzten werden die Ersten sein.
CPP:
void ftp::disconnect (void)
{
        // Verbindung zum FTP-Server aktiv? Wenn ja: Beenden
    if (connection_ftp_ != NULL)
    {
        ::InternetCloseHandle (connection_ftp_);
        connection_ftp_ = NULL;
    }

        // Verbindung zum Internet durch das Programm aktiv? Wenn ja: Beenden
    if (connection_internet_ != NULL)
    {
        ::InternetCloseHandle (connection_internet_);
        connection_internet_ = NULL;
    }
}


Nachdem man eine Verbindung erstellt hat kann man mit den FTP Funktionen drangehen, z.B. Datei hochladen, runterladen, löschen
CPP:
// ///////////////////////////////////////////////////////////////////////////
// PUBLIC
//
// Läd eine Datei vom FTP-Server auf die Festplatte runter ('out' wurde noch nicht beschrieben!)
// ///////////////////////////////////////////////////////////////////////////
bool ftp::getFile (const wchar_t* source, const wchar_t* dest, bool fail, bool binary, wchar_t* out)
{
        // Datei runterladen
    return (::FtpGetFileW (connection_ftp_, source, dest, fail, FILE_ATTRIBUTE_NORMAL, binary ? 0x00000002 : 0x00000001, 0) != 0);
}

// ///////////////////////////////////////////////////////////////////////////
// PUBLIC
//
// Läd eine Datei von der Festplatte auf den FTP-Server ('out' wurde noch nicht beschrieben!)
// ///////////////////////////////////////////////////////////////////////////
bool ftp::putFile (const wchar_t* source, const wchar_t* dest, bool binary, wchar_t* out)
{
        // Datei hochladen
    return (::FtpPutFileW (connection_ftp_, source, dest, binary ? 0x00000002 : 0x00000001, 0) != 0);
}
Auch hier kann als letzter Parameter eine Recieverfunktion gesetzt werden.

Möchte man z.B. den CHMOD eines Ordners ändern, geht das über diese Funktion
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/ftpcommand.asp
Sie erwartet einen allgemeinen FTP-String

Danach sollte man wie immer den Status mit InternetGetLastResponseInfo abfragen, ob es fehler gab, ob es ein Ereignis gab usw.

Wenn man eine Recieverfunktion benutzen will (z.B. um zu erfahren wieviele Byte gesendet/empfangen wurden) benutzt man folgende Funktion:
CPP:
InternetSetStatusCallback (connection_internet_, InternetStatusCallback);
1. Parameter ist klar, ist die session fürs Internet, das andere ist folgende Callback
CPP:
void CALLBACK InternetStatusCallback(
        IN HINTERNET hInternet,
        IN DWORD Context,
        IN DWORD Status,
        IN LPVOID StatusInfo,
        IN DWORD StatusInfoSize)
{
  char buff[1024];
  LPDWORD lpdwByte;
  memset(buff, 0, 1024);


  switch(Status) {
    case INTERNET_STATUS_CONNECTING_TO_SERVER:
      wsprintf( buff, "CONNECTING TO %s", (char*)StatusInfo);
      break;
    case INTERNET_STATUS_CONNECTED_TO_SERVER:
      wsprintf( buff, "CONNECTED TO %s", (char*)StatusInfo);
      break;
    case INTERNET_STATUS_RECEIVING_RESPONSE:
      strcpy( buff, "RECEIVING RESPONSE");
      break;
    case INTERNET_STATUS_RESPONSE_RECEIVED:
      lpdwByte = (LPDWORD)StatusInfo;
      wsprintf( buff, "RECEIVED %dByte", *lpdwByte);
      break;
    case INTERNET_STATUS_CONNECTION_CLOSED:
      strcpy( buff, "CONNECTION CLOSED");
      break;
  }
  if( strlen(buff) > 0 ) Form1->StatusBar1->SimpleText = buff;
}


Diese Funktion sollte man jedoch auch bei den anderen Win32INet Funktionen setzen z.B. FtpGetFile usw als letzten Parameter um 100%ig sicher zu gehen.

Die Win32INet API beinhaltet alles für professionelle Browser und FTP Programme. Auch das beliebte FTP Programm SmartFTP wurde mit der Win32INet API gecodet.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
PeaceKiller
JLI Master


Alter: 36
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 17.01.2006, 21:34    Titel: Antworten mit Zitat

Patrick hat Folgendes geschrieben:
[...] Opera wurde damit programmiert.


Das darf man bezweifeln, da Opera auf weit mehr Plattformen als Windows läuft, oder hast du Quellen?
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 17.01.2006, 21:36    Titel: Antworten mit Zitat

PeaceKiller
Du weißt genau wie ich das es dafür eine ganz einfache Lösung gibt die in vielen Programmen anwendung findet: Kapselung durch Interfacedesign.

Warum man dieser annahme zu 100% sicher sein kann?

1. Pressekonferenzen
2. Da unter Windows CE kein Winsocks oder anderes neben Win32INetAPI funktioniert. Jemand der schon mal dafür gecodet hat, weiß was ich meine Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
abc_d
JLI Master Trainee


Alter: 35
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 17.01.2006, 21:40    Titel: Antworten mit Zitat

Übrigens würde ich bei google nach "Win32INet API" suchen. Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
PeaceKiller
JLI Master


Alter: 36
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 17.01.2006, 21:43    Titel: Antworten mit Zitat

Ich bezweifle ernsthaft das sich die Opera-Macher die Mühe machen eigene Protokollimplementationen zu schreiben und nur für Windows die WinAPI zu verwenden. Viel einfacher wäre es für Windows auch einfach Sockets zu nehmen.

Win32NetAPI ist übrigens deine eigene Wortschöpfung.

Zitat:
Pressekonferenzen

Quellen bitte.

Zitat:
Windows CE

Ich sehe auf der Website keine Unterstützung für Windows CE.

edit: Ich meine die Seite von Opera
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine


Zuletzt bearbeitet von PeaceKiller am 17.01.2006, 21:49, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 17.01.2006, 21:46    Titel: Antworten mit Zitat

PeaceKiller
Spielste grade wieder den Korintenkaka oder haste momentan nichts zu tun?

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcesdkr/html/_wcesdk_win32_FtpGetFile.asp Bitte CE!

Nebenbei: Windows CE hat keine 2 GByte für jeden Scheiß parat, daran schon mal gedacht? Daran mal gedacht wie alt die WinINet ist?

Mag sein das es ne eigene Wortschöpfung ist, trifft aber zu:

Win32 für Windows 32 Bit
INet standard
API standard.

So und nun halt einfach mal die Klappe denn es geht hier nicht um deine Sticheleinen sondern um TLOPs Frage. Danke und Ende.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2, 3  Weiter
Seite 1 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum