Veröffentlicht 15. Januar 200520 j Hi, ich wollte fragen ob ihre vielleicht wisst wo es aktuelle socket tuts gibts einem unter linux und einmal unter win. in c/c++ danke , mfg Time-walker
15. Januar 200520 j zumindest für Windows könntest du hier was finden: http://www.informatikforum.de/showthread.php?t=387
15. Januar 200520 j hab mir gerade die grundlagen durchgelesen, hab aber ein problem beim complimieren von code. <code> #include <windows.h> #include <winsock2.h> #include <stdio.h> #include <conio.h> int startWinsock(void); int main() { long rc; rc=startWinsock(); if(rc!=0) { printf("Fehler: startWinsock, fehler code: %d\n",rc); return 1; } else { printf("Winsock gestartet!\n"); } getch(); } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); } </code> benutze den bloodseh dev - C++ compiler unter. hab ein neues projekt erstellt- konsolenanwendung und C projekt. hab den code eingefügt und wollte den es complimieren. fehlermeldung = [Linker error] undefined reference to `WSAStartup@8' [build Error] [socket.exe] Error 1
16. Januar 200520 j weiss nicht. hab mal paar updates gemacht. jetzt hab ich diese fehler meldung. [Linker error] undefined reference to `WSAStartup@8' ld returned 1 exit status [build Error] [socket.exe] Error 1
16. Januar 200520 j WSAStartup ist glaube ich eine API. Du solltest erst mal kären ob mit deinem Compiler API Aufrufe möglich sind. Frank
16. Januar 200520 j Das mit den APIs ist Käse. Du musst einfach nur deinem Linker die ws2_32.lib angeben. Such mal ein bischen in den Einstellungen wo die anderen .lib Dateien stehen.
16. Januar 200520 j alo bei den compiler optionen unter bibliotheken is der order zu den lib dateien angegeben. dann hab ich vielleicht nich die lib dateien. aber die lib dateien haben nicht als endung .lib sonder .a z.b. libwsock32.a
16. Januar 200520 j so habe das problem gelöst. musste unter projektoptionen die ws2_32.lib hinzufügen. aber bei mir heisst die datei libwsock32.a. jetzt läufts auch, aber ein neues problem is aufgetreten. ob wohl ich in meinem quellcode den befehl am ende getch(); nehmen anstatt retrun 0; geht das fenster sofort wieder zu.
17. Januar 200520 j Das ist noch irgendein Zeichen im Eingabepuffer. Mach noch mal ein zweites getch() hinterher. Frank
17. Januar 200520 j hab das problem schon gelöst hab einfach das return raus genommen dann gings wenn ich einfach nach dem retrun ne getch(); mache gings auch nicht.
17. Januar 200520 j hab das problem schon gelöst hab einfach das return raus genommen dann gings wenn ich einfach nach dem retrun ne getch(); mache gings auch nicht.Du musst getch() vor dem return machen. Wenn der Programmablauf auf ein return trifft, wird (außer den Destruktoren von Autovariablen) nichts mehr in der Funktion ausgeführt.
17. Januar 200520 j also so sieht der quellcode bei mir jetzt aus. Client: #include <windows.h> #include <stdio.h> #include <winsock2.h> #include <conio.h> int winsock(); int winsock() { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); } main() { long a; SOCKET s; a=winsock(); SOCKADDR_IN addr; if(a!=0) {printf("fehler: %d",a); } else {printf("socket gestartet!\n"); } s=socket(AF_INET,SOCK_STREAM,0); if(s==INVALID_SOCKET) {printf("konte nicht erstellt werden, Fehler: %d\n",WSAGetLastError()); } else {printf("Socket erstellt!\n"); } memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten addr.sin_family=AF_INET; addr.sin_port=htons(12345); // wir verwenden mal port 12345 addr.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner ist unser eigener a=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)); if(a==SOCKET_ERROR) { printf("Fehler: connect gescheitert, fehler code: %d\n",WSAGetLastError()); } else { printf("Verbunden mit 127.0.0.1\n...[Enter]");} getch(); } und das ist der server: #include <windows.h> #include <winsock2.h> #include <stdio.h> #include <conio.h> #include <dos.h> int Winsock(); int Winsock() { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); } int main() { long a; SOCKET acceptSocket; SOCKADDR_IN addr; // Winsock starten a=Winsock(); if(a!=0) { printf("Fehler: startWinsock, fehler code: %d\n",a); } else { printf("Socket gestartet!\n"); sleep(2); } // Socket erstellen acceptSocket=socket(AF_INET,SOCK_STREAM,0); if(acceptSocket==INVALID_SOCKET) { printf("fehler code: %d\n",WSAGetLastError()); } else { printf("Socket erstellt!\n"); sleep(2); } memset(&addr,0,sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(12345); addr.sin_addr.s_addr=ADDR_ANY; a=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); if(a==SOCKET_ERROR) { printf("fehler code: %d\n",WSAGetLastError()); } else { printf("Socket an port 12345 gebunden\n"); } getch(); } aber wenn ich die beiden codes complimiere und dann den server starte und danach den client, krieg ich ne fehler meldung das der client sich nicht zum server verbunden hat. woran kanns liegen ?
17. Januar 200520 j Dein Server müsste sich eigentlich gleich wieder beenden. Es wäre gut, wenn du accept auch aufrufst. Einfach nur einen Socket namens acceptSocket zu erstellen, reicht da nicht. P.S.: Könntest du ab jetzt Code-Tags benutzen? Erhöht die Lesbarkeit.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.