Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

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.

Geschrieben
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.
Geschrieben

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 ?

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...