C++ Winsock Fehler

Hallo ich hab folgendes Problem, ich hab folgenden c++ Code wenn ich in aber kompiliere bekomm ich massig fehlermeldungen.
Ich habe es mit Bloodshed c++, codeblocks und borland c++ 5 Compilern probiert.
Wenn jemand mal den Code durgucken könnte und mir den Fehler erklären könnte wäre spitze!

MeinCode:
Code:
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>

//Prototypen

int startWinsock(void);
int main()

{

  long rc;

  SOCKET acceptSocket;

  SOCKADDR_IN addr;

  // Winsock starten

  rc=startWinsock();

  if(rc!=0)

  {

    printf("Fehler: startWinsock, fehler code: %d\n",rc);

    return 1;

  }

  else

  {

    printf("Winsock gestartet!\n");

  }

  // Socket erstellen

  acceptSocket=socket(AF_INET,SOCK_STREAM,0);

  if(acceptSocket==INVALID_SOCKET)

  {

    printf("Fehler: Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());

    return 1;

  }

  else

  {

    printf("Socket erstellt!\n");

  }

  return 0;

}


int startWinsock(void)

{

  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&wsa);
  }
Fehler:
Code:
C:\Users\Skip\Desktop\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `send@16'| C:\Users\Skip\Desktop

\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `WSAGetLastError@0'| C:\Users\Skip\Desktop

\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `WSAStartup@8'| C:\Users\Skip\Desktop

\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `socket@12'| C:\Users\Skip\Desktop\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `WSAGetLastError@0'| C:\Users\Skip\Desktop

\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `htons@4'| C:\Users\Skip\Desktop\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `bind@12'| C:\Users\Skip\Desktop

\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `WSAGetLastError@0'| C:\Users\Skip\Desktop

\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `listen@8'| C:\Users\Skip\Desktop\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `WSAGetLastError@0'| C:\Users\Skip\Desktop

\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `select@20'| C:\Users\Skip\Desktop\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `closesocket@4'| C:\Users\Skip\Desktop

\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `WSACleanup@0'| C:\Users\Skip\Desktop

\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `accept@12'| C:\Users\Skip\Desktop\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `inet_ntoa@4'| C:\Users\Skip\Desktop

\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `recv@16'| C:\Users\Skip\Desktop\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `inet_ntoa@4'| C:\Users\Skip\Desktop

\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `closesocket@4'| C:\Users\Skip\Desktop

\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `WSAGetLastError@0'| C:\Users\Skip\Desktop

\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `inet_ntoa@4'| C:\Users\Skip\Desktop\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `inet_ntoa@4'| C:\Users\Skip\Desktop

\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `closesocket@4'| C:\Users\Skip\Desktop

\selectchatsrv.o:selectchatsrv.cpp|| undefined reference to `inet_ntoa@4'| ||=== Build finished: 23 errors, 0 warnings ===|     printf("Fehler: startWinsock, fehler code: %d\n",rc);
Bedanke mich für jede Hilfe =)
MFG
 
Zuletzt bearbeitet:
Das sind Linkerfehler. Du musst gegen die Ws2_32.lib linken.
 
In deinem Fall müsstest du wohl mit dem Parameter -lwsock32 compilieren. Ich empfehle dir aber dich etwas näher mit der Materie zu beschäftigen und auch erst mal selbst nach der Lösung für ein Problem zu suchen. Durch einfaches Copy&Paste kommst du sonst nie ans Ziel.

Es reicht auch, wenn du deine Frage hier stellst, du musst mir nicht eine Kopie deines Posts per PN schicken ;)
 
In deinem Fall müsstest du wohl mit dem Parameter -lwsock32 compilieren. Ich empfehle dir aber dich etwas näher mit der Materie zu beschäftigen und auch erst mal selbst nach der Lösung für ein Problem zu suchen. Durch einfaches Copy&Paste kommst du sonst nie ans Ziel.

Es reicht auch, wenn du deine Frage hier stellst, du musst mir nicht eine Kopie deines Posts per PN schicken ;)

Ich hab dir ne PN geschrieben weil ich dachte dass du nichtmehr im Thread antwortest und ich wollt auf nummer sicher gehen ;)

Winsock Tutorial: Grundlagen und TCP
Da habich den code her und ich fang halt noch an
 
Hättest du die Seite komplett gelesen, hättest du oben die Zeilen
Das Progamm muss gegen ws2_32.lib gelinkt werden. Falls man Visual Studio verwendet muss man bei den Projekteigenschaften unter Linker ws2_32.lib zu den Libraries hinzufügen.
Eventuell schafft aber auch folgende Zeile am Anfang des Quellcodes Abhilfe:[FONT=Courier New, Courier, monospace] #pragma comment( lib, "ws2_32.lib" )[/FONT]
gesehen ;)
 
Ich habe das Tutorial gelesen aber ich hab nich verstanden wie man beim Bloodshed C++ gegen das Programm linkt ?!?
Kann mir das einer bitter erklären?
 
Also ich hab mir ca vor 1,5 jahren mehrere Bücher über C++ lernen gekauft.
Weils mich intressiert hat und es mir spaß gemacht hat, hab ich mir mühe gegeben das alles zu lernen.
Nur wird in solchen Büchern immer mit consolen iostream programmen angefangen was mir dann nach nem halben jahr zu langweilig wurde.
Ich habs dann lange liegen gelassen und mich neulich zum ersten mal wieder mit der Materie beschäftigt.
Ich bin dann auf die Idee gekommen etwas weiter zu greifen und mit Winsockets zu arbeiten (Wollte mit einfachen chat programm anfangen und bin dann auf das gestoßen)

Ganze Geschichte hat die Pointe dass ich nicht wirklich erfahren bin aber durchaus gewillt bin mich damit zu befassen.

Mein Problem ist das ich das mit gegeneinander linken nich raffe ?!?!
Bei Hello World Programmen hat alles wunderbar funktioniert und auch bei Rechnern und Input output programmen musste ich nichts einstellen also es ging einfach mit neuem projekt usw.

Wie soll ich mit dem parameter Compilieren ???
Danke für die Hilfe !

MFG Skipper
 
Ich kann das gut verstehen, mir ging es früher ähnlich. Aber das Problem ist, wenn man sich übernimmt, wird man oft in Probleme rennen. Und wenn die dann zu hoch für einen sind, sodass man da steht wie der Ochs vorm Berg und nicht einmal weißt, wie man Hinweise für die Lösung finden kann, sollte man sich überlegen, ob man sich nicht zu viel zugemutet hat.

Aber wie dem auch sei. Wenn du nach deiner Fehlermeldung gesucht hättest, hättest du selbst herausgefunden, dass du gegen die Library linken musst. :wink:
Hast du mal in den Projekteinstellungen gesucht, ob da irgendwo die Rede von einem Linker ist? Oder man Kompilerparameter einstellen kann? Hört sich nicht danach an...

Also ich kenne deine IDE selbst nicht, aber nach etwas googeln...Es sollte in den Projekteinstellungen einen Reiter "Parameters" geben. Dort soll man dann Kompiler- und Linkeroptionen setzen können. Schau doch mal nach, ob das wirklich zutrifft.
 
Welchen IDE benutzt du ?? vlt kann ich mir den dann von meinem dad hohlen.
btw. Mit welchem shortcut maximiere ich ein Fenster (Spiel,Programm ..) und bringe es in den Fenstermodus ?


SO ich habe es jetz. Aber es ist ja eine Konsolen ausgabe deswegen schließt es sofort wieder,
kann ich mit getch(); das fenster offen halten weil getch is ja nicht ansi-konform.
Stört das überhaupt? Und ich muss getch ja vor ende der main funktion einfügen also vor return oder?
 
Zuletzt bearbeitet:
Ich verwende Visual Studio 2010. Davon gibt es eine kostenlose Variante Visual Studio Express. Ist allerdings nicht Open Source.
 
Ich verwende Visual Studio 2010. Davon gibt es eine kostenlose Variante Visual Studio Express. Ist allerdings nicht Open Source.

Danke für die Hilfe ich habs jetz komplet auf die Reihe bekomme, aber was bedeutet der Parameter?

Ich hab jetz wieder das problem das sich die KOnsole sofort schließt obwohl ich getchar(); und conio.h eingebunden habe
 
Zuletzt bearbeitet:
-lwsock32 weist den Linker an, die libwsock32.dll.a in den Bindungsprozess mit einzubeziehen. In dieser Datei werden die Verknüfpungen der Funktionen (WSAStartup, socket, ...) mit der DLL festgehalten. Dadurch kann Windows dann beim Ausführen des Programms die Einsprungpunkte der Funktionen aus der DLL auslesen, und sie so bei einem Aufruf ausführen.
 
Vermutlich ist das Programm in einen der Fehlerfälle gelaufen und dort steht einfach nur return und damit wird das Programm dann beendet.
 
Zurück
Oben