Ich füge in das Projekt "WS2_32.LIB" ein. (is im c++ libraryverzeichnis)
Möchte mich an dieser stelle mal für eure hilfe/geduld bedanken
habe dein tut übersehen sry
ich denke ma das mit dem socket ist der richtige weg.
ich muss nur das zeugs zuerst ma lernen.
ich denke ich versteh was das prgm machen sollte
wenn ich es jedoch kopiere und bei mir
einfüge habe ich da ein klitzekleines problem
nämlich folgendes
[Linker error] undefined reference to `WSAStartup@8' ld returned 1 exit status (what the hell? )
C:\socket\Makefile.win [Build Error] [Project1.exe] Error 1
(ich habe ganz normal im dev-C++ console appl ausgewählt)
tja was nu?
Ich füge in das Projekt "WS2_32.LIB" ein. (is im c++ libraryverzeichnis)
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
sollich dir ma richtig aufn wecker gehen?
ich finds nich! entweder bin ich echt zu dumm
oder ich finde kein einziges .lib file im ganzen dev_cpp ordner
*wahnsinnig werden*
gr comDave
Normalerweise dort, wo man den Compiler installiert hat.
Bei mir z.B. is das
C:\Program Files\Microsoft Visual Studio\VC98\Lib
Ahja, nochwas Bei "FIle in Project einfügen" mußt du natürlich den Type "LIB" auswählen
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
so jetz habe ich es gefunden gab einfach _lib und lib vorallem sind es bei mir *.a files.
so nu beginn ich erstma mit dem lernen
gr comDave
werde mich heute vielleicht auch mal damit befassen. wenn ich weiß wie es geht, poste ich hier. ich verwende allerdings bcc32, nicht bloodshed oder sowas. sind aber nur kleine unterschiede beim einbinden der libraries.
funktioniert der http-get jetzt bei dir, bzw kannst du es fehlerfrei kompilieren? das proggie ist keine console-anwendung, sondern richtig mit nem fenster und so..
gute tutorial zu winsock finden sich auf http://www.c-worker.ch/
viel erfolg, und melde dich, wenn etwas nicht klappt.
gruesse
DAS hätt ich nicht gesagt...
folgendes prob: ich erstelle eine verbindung zu unserem server
der auch brav antworted dann will ich aber z.B. help senden und wieder
empfangen. nun empfängt er auch was ich geschickt habe also "help",
allerdings schreibt er mir nicht was er zum befehl help meint
z.B "'could not find 'help'".
überdies hab ich beim rückgabewert '4' was ja logischerweise "help" entspricht.
muss ich da noch irgendein <cr><lf> senden? bzw. kann ich das mit \0 \n \x13 tun?
Also, bei ASCII ist <CR><LF> immer gut.
Was du da im moment siehst, ist wohl das Echo, weil er wohl denkt, du bist ein Terminal
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
so.. das hat zwar ein bisschen gedauert, aber hier habe ich eine console-anwendung, die emails von einem pop3-server herunterläd, sie anzeigt, und anschliessend vom server löscht.
das ganze ist noch nicht ganz perfekt (man sollte zum bleistift bei jedem "send(..);" den rückgabewert prüfen), aber man sieht wie man es macht, und es funktioniert auch (getestet unter xp mit web.de, gmx.de, und meinem webspace-server).
vielleicht hilft es jmdCode:#include<stdio.h> #include <winsock2.h> //#include<string.h> // braucht bcc32 nicht int main(int argc, char* argv[]) { long rc; SOCKET s; SOCKADDR_IN addr; char buf[1024]; WSADATA wsa; HOSTENT* he; int number_of_mails,i; char *p,*p2; if(argc!=4) { printf("syntax: pop3console.exe host user password\n"); printf("syntax: pop3console.exe pop3.web.de meier@web.de ganzgeheim\n"); exit(1); } // socket erstellen und connecten if(WSAStartup(MAKEWORD(2,0),&wsa)!=0) { printf("Could not Startup WSA\n"); exit(1); } s=socket(AF_INET,SOCK_STREAM,0); if(s==INVALID_SOCKET) { WSACleanup(); printf("Could not create socket\n"); exit(1); } memset(&addr,0,sizeof(SOCKADDR_IN)); // auf 0 setzen addr.sin_family=AF_INET; addr.sin_port=htons(110); // port he=gethostbyname(argv[1]); memcpy(&(addr.sin_addr),he->h_addr_list[0],4); rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)); if(rc==SOCKET_ERROR) { closesocket(s); WSACleanup(); printf("Could not connect\n"); exit(1); } printf("connected to %s\n",argv[1]); // login + check for mail sprintf(buf,"USER %s\r\n",argv[2]); rc=send(s,buf,strlen(buf),0); if(rc==SOCKET_ERROR) { closesocket(s); WSACleanup(); printf("Could not send\n"); exit(1); } rc=recv(s,buf,1023,0); buf[rc]='\0'; printf("%s",buf); sprintf(buf,"PASS %s\r\n",argv[3]); rc=send(s,buf,strlen(buf),0); if(rc==SOCKET_ERROR) { closesocket(s); WSACleanup(); printf("Could not send\n"); exit(1); } rc=recv(s,buf,1023,0); buf[rc]='\0'; printf("%s",buf); rc=recv(s,buf,1023,0); buf[rc]='\0'; printf("%s",buf); sprintf(buf,"STAT\r\n"); rc=send(s,buf,strlen(buf),0); if(rc==SOCKET_ERROR) { closesocket(s); WSACleanup(); printf("Could not send\n"); exit(1); } rc=recv(s,buf,1023,0); buf[rc]='\0'; printf("%s",buf); // anzahl der mails bestimmen // wenn alles geklappt hat, steht hinter dem letzten "+OK" die anzahl der mails im postfach p=buf; while(strstr(p,"+OK")!=NULL) p=strstr(p,"+OK")+1; p+=3; p2=strstr(p," "); if(p&&p2) { *p2=0; number_of_mails=atoi(p); printf("%d mails auf dem server\n",number_of_mails); } // mails runterladen for(i=1;i<=number_of_mails;i++) { sprintf(buf,"RETR %d\r\n",i); send(s,buf,strlen(buf),0); do { rc=recv(s,buf,1024,0); buf[rc]='\0'; printf("%s",buf); if(strstr(&buf[rc-5],"\r\n.\r\n")!=NULL)break; } while(rc!=SOCKET_ERROR); // geladene email vom server löschen sprintf(buf,"DELE %d\r\n",i); send(s,buf,strlen(buf),0); } // session beenden sprintf(buf,"QUIT\r\n"); send(s,buf,strlen(buf),0); // aufraeumen closesocket(s); WSACleanup(); return 0; }
man würde natürlich die mails lokal speichern, und dann einen emailbetrachter öffnen, statt sie nur in der konsole darzustellen.
eine andere idee ist, daraus einen spamfilter zu basteln, der unerwünschte mails löscht, bevor man sein email-proggie öffnet, das dann den rest runterläd.
na gut na gut.. ich habe gerade festgestellt, dass es mit IE und mozilla kein problem ist, den code zu markieren und zu copypasten. nur mein opera kann das nicht. taugenichtse.Katze: strcmp("QUOTE", "CODE") != 0 ) !!!
gruesse von der katz
Na super, das sollt' doch helfen !
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Lesezeichen