 |
JLI Spieleprogrammierung
|
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
|
Verfasst am: 17.01.2006, 15:28 Titel: Upload[FTP]&Download[DB] |
|
|
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  _________________ 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 |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 17.01.2006, 15:36 Titel: Re: Upload[FTP]&Download[DB] |
|
|
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  |
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 |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 17.01.2006, 15:49 Titel: |
|
|
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 ) _________________ 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 |
|
 |
sp3cK-r0LL3 Senior JLI'ler

Alter: 34 Anmeldedatum: 18.06.2004 Beiträge: 275
Medaillen: Keine
|
Verfasst am: 17.01.2006, 15:54 Titel: |
|
|
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 ) _________________ 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 |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 17.01.2006, 15:59 Titel: |
|
|
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 ) |
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 17.01.2006, 16:09 Titel: |
|
|
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  _________________ '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 |
|
 |
abc_d JLI Master Trainee

Alter: 35 Anmeldedatum: 27.01.2003 Beiträge: 615
Medaillen: Keine
|
Verfasst am: 17.01.2006, 17:42 Titel: |
|
|
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 |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 17.01.2006, 20:13 Titel: |
|
|
Vielen Dank für eure Meinungen, ich werde mir diese Funktionen/Libs mal näher ansehen
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?
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 |
|
 |
abc_d JLI Master Trainee

Alter: 35 Anmeldedatum: 27.01.2003 Beiträge: 615
Medaillen: Keine
|
Verfasst am: 17.01.2006, 21:09 Titel: |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 17.01.2006, 21:26 Titel: |
|
|
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 |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 17.01.2006, 21:34 Titel: |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 17.01.2006, 21:36 Titel: |
|
|
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  _________________ '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 |
|
 |
abc_d JLI Master Trainee

Alter: 35 Anmeldedatum: 27.01.2003 Beiträge: 615
Medaillen: Keine
|
Verfasst am: 17.01.2006, 21:40 Titel: |
|
|
Übrigens würde ich bei google nach "Win32INet API" suchen.  |
|
Nach oben |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 17.01.2006, 21:43 Titel: |
|
|
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.
Quellen bitte.
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
|
|
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
|