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
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
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
robotto7831a Geschrieben 16. Januar 2005 Geschrieben 16. Januar 2005 Unterstütz dein Projekt APIs? Frank
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
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
Time-walker Geschrieben 16. Januar 2005 Autor Geschrieben 16. Januar 2005 wie oder wo kann man das nachschauen ?
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.
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
robotto7831a Geschrieben 16. Januar 2005 Geschrieben 16. Januar 2005 Ähm. Arbeitest Du auf Linux oder auf Windows? Frank
Time-walker Geschrieben 16. Januar 2005 Autor Geschrieben 16. Januar 2005 habe win2k, also das is den compiler www.bloodshed.net
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.
robotto7831a Geschrieben 17. Januar 2005 Geschrieben 17. Januar 2005 Das ist noch irgendein Zeichen im Eingabepuffer. Mach noch mal ein zweites getch() hinterher. Frank
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.
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.
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.
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 ?
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.
Time-walker Geschrieben 17. Januar 2005 Autor Geschrieben 17. Januar 2005 uhh, stimmt, da fehlt ja noch was.
Klotzkopp Geschrieben 17. Januar 2005 Geschrieben 17. Januar 2005 Du musst noch accept aufrufen. bind allein tut's nicht.
Time-walker Geschrieben 17. Januar 2005 Autor Geschrieben 17. Januar 2005 jo ich weiss habs auch gerade gemerkt das ich es ausgelassen hab.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden