Zum Inhalt springen

sockets unter win und/oder linux


Time-walker

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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