Time-walker Geschrieben 15. Januar 2005 Geschrieben 15. Januar 2005 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 Zitieren
Stampede Geschrieben 15. Januar 2005 Geschrieben 15. Januar 2005 zumindest für Windows könntest du hier was finden: http://www.informatikforum.de/showthread.php?t=387 Zitieren
robotto7831a Geschrieben 15. Januar 2005 Geschrieben 15. Januar 2005 Hallo, schau mal da. Frank Zitieren
Time-walker Geschrieben 15. Januar 2005 Autor Geschrieben 15. Januar 2005 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 Zitieren
robotto7831a Geschrieben 16. Januar 2005 Geschrieben 16. Januar 2005 Unterstütz dein Projekt APIs? Frank Zitieren
Time-walker Geschrieben 16. Januar 2005 Autor Geschrieben 16. Januar 2005 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 Zitieren
robotto7831a Geschrieben 16. Januar 2005 Geschrieben 16. Januar 2005 WSAStartup ist glaube ich eine API. Du solltest erst mal kären ob mit deinem Compiler API Aufrufe möglich sind. Frank Zitieren
Time-walker Geschrieben 16. Januar 2005 Autor Geschrieben 16. Januar 2005 wie oder wo kann man das nachschauen ? Zitieren
Guybrush Threepwood Geschrieben 16. Januar 2005 Geschrieben 16. Januar 2005 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. Zitieren
Time-walker Geschrieben 16. Januar 2005 Autor Geschrieben 16. Januar 2005 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 Zitieren
robotto7831a Geschrieben 16. Januar 2005 Geschrieben 16. Januar 2005 Ähm. Arbeitest Du auf Linux oder auf Windows? Frank Zitieren
Time-walker Geschrieben 16. Januar 2005 Autor Geschrieben 16. Januar 2005 habe win2k, also das is den compiler www.bloodshed.net Zitieren
Time-walker Geschrieben 16. Januar 2005 Autor Geschrieben 16. Januar 2005 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. Zitieren
robotto7831a Geschrieben 17. Januar 2005 Geschrieben 17. Januar 2005 Das ist noch irgendein Zeichen im Eingabepuffer. Mach noch mal ein zweites getch() hinterher. Frank Zitieren
Time-walker Geschrieben 17. Januar 2005 Autor Geschrieben 17. Januar 2005 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. Zitieren
Klotzkopp Geschrieben 17. Januar 2005 Geschrieben 17. Januar 2005 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. Zitieren
Time-walker Geschrieben 17. Januar 2005 Autor Geschrieben 17. Januar 2005 ja return brauch ich doch nicht, hab einfach das retrun gelöst und es lief. Zitieren
Time-walker Geschrieben 17. Januar 2005 Autor Geschrieben 17. Januar 2005 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 ? Zitieren
Klotzkopp Geschrieben 17. Januar 2005 Geschrieben 17. Januar 2005 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. Zitieren
Time-walker Geschrieben 17. Januar 2005 Autor Geschrieben 17. Januar 2005 uhh, stimmt, da fehlt ja noch was. Zitieren
Klotzkopp Geschrieben 17. Januar 2005 Geschrieben 17. Januar 2005 Du musst noch accept aufrufen. bind allein tut's nicht. Zitieren
Time-walker Geschrieben 17. Januar 2005 Autor Geschrieben 17. Januar 2005 jo ich weiss habs auch gerade gemerkt das ich es ausgelassen hab. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.