Netzwerkprogrammierung
-
Kann mir vielleicht jemand mit ein bisschen mehr Programmiererfahrung helfen. Ich versuche eine Verbindung eines Programms zu einem Webserver über das Internet herzustellen und dort dann auf eine Datei zuzugreifen. Leider scheitere ich schon bei den einfachsten Sachen und schaffe es noch nicht mal eine Verbindung irgendwohin herzustellen. Mittlerweile habe ich an die 20 Tutorials und betsimmt 10 Foren durchgesucht und probiert und komme einfach nicht weiter.
Da die meisten Anleitungen für Linux sind und ich mit Windows 2000 arbeiten muss erschwert sich die Sache für mich ungemein.
Vielleicht kann mir ja jemand helfen. Ich wäre für ein weiteres Tutorial, Ebooks oder vielleicht ein kleines Skript wirklcih sehr dankbar weil ich langsam aufgeben muss.
Ich gebe euch mal meinen letzten Versuch der leider nicht funktioniert wegen Mangel an elementeren Programmierkenntnissen.
Ist vom C++ Builder 4. 0//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <winsock.h> #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { SOCKET s; const struct sockaddr_in addr; s = socket(AF_INET, SOCK_STREAM, 0); if (s == SOCKET_ERROR) { Memo1->Lines->Add("socket() failed"); } addr.sin_addr.s_addr = inet_addr("192.168.100.20"); addr.sin_port = htons(80); addr.sin_family = AF_INET; if (connect(s, &addr, sizeof(addr)) == -1) { Memo1->Lines->Add("connect() failed"); } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 2, 0 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { Memo1->Lines->Add("Fehler WinSock DLL."); } if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 0 ) { Memo1->Lines->Add("Fehler WinSock DLL."); WSACleanup( ); } } //---------------------------------------------------------------------------
Edit:
Bitte die Code-Tags benutzen. Danke![ Dieser Beitrag wurde am 04.04.2003 um 15:16 Uhr von Jansen editiert. ]
-
Nur weil du zum Kompilieren den BCB benutzt ist das doch noch lange kein BCB-Problem.
Dein eigentlicher Netzwerkcode ist doch reine WinAPI, deshalb verschoben in's gleichnamige Forum.
-
hmm, nur so ein gedanke ... im allgemeinen greift man auf einen webserver bzw. dessen datei mittels FTP zu ...
wie man das macht, habe ich vor kurzem mal im DOS/Konsolen Forum gepostet
ich mache die sockets immer wie folgt auf ( habe nie geschaut welchen wert IPPROTO_TCP hat)
socket( AF_INET, SOCK_STREAM, IPPROTO_TCP);
ansonsten würde ich dir einmal empfehlen mit dem debugger alle werte zu checken, ist der socket gültig usw.
wenn alles passt check mal mit WSAGetLastError() was da schief gelaufen ist, vielleicht hast du gar keine berechtigung für einen zugriff oder was auch immer. den fehler code findest du im msdn, bzw in einer header-datei von ms, musste mal durchsuchen.
rocknix ///
[ Dieser Beitrag wurde am 04.04.2003 um 15:43 Uhr von RockNix editiert. ]
-
Hm, wie eine const-Zuweisung ohne Compilerfehler durchgeht, frage ich mich allerdings:
const struct sockaddr_in addr; addr.sin_addr.s_addr = inet_addr("192.168.100.20");