Problem mit Tutorials von c-worker.ch

Ich habe ein Problem, eine Verbindung vom Client zum Server herzustellen.

Code des Clients:
Code:
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>

//Prototypen
int startWinsock(void);

int main()
{
  long rc;
  SOCKET s;
  SOCKADDR_IN addr;
  char buf[256];


  // Winsock starten
  rc=startWinsock();
  if(rc!=0)
  {
    printf("Fehler: startWinsock, fehler code: %d\n",rc);
    return 1;
  }
  else
  {
    printf("Winsock gestartet!\n");
  }

  // Socket erstellen
  s=socket(AF_INET,SOCK_STREAM,0);
  if(s==INVALID_SOCKET)
  {
    printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
    return 1;
  }
  else
  {
    printf("Socket erstellt!\n");
  }

  // Verbinden
  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

  rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
  if(rc==SOCKET_ERROR)
  {
    printf("Fehler: connect gescheitert, fehler code: %d\n",WSAGetLastError());
    return 1;
  }
  else
  {
    printf("Verbunden mit 127.0.0.1..\n");
  }


  // Daten austauschen
  while(rc!=SOCKET_ERROR)
  {
    printf("\nZeichenfolge eingeben [max 256]: ");
    gets(buf);
    send(s,buf,strlen(buf),0);
    rc=recv(s,buf,256,0);
    if(rc==0)
    {
      printf("Server hat die Verbindung getrennt..\n");
      break;
    }
    if(rc==SOCKET_ERROR)
    {
      printf("Fehler: recv, fehler code: %d\n",WSAGetLastError());
      break;
    }
    buf[rc]='\0';
    printf("\nServer antwortet: %s\n",buf);
  }
  closesocket(s);
  WSACleanup();
  return 0;
}

int startWinsock(void)
{
  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&wsa);
}

und hier der Code des Servers
Code:
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>

//Prototypen
int startWinsock(void);

int main()
{
  long rc;
  SOCKET acceptSocket;
  SOCKET connectedSocket;
  SOCKADDR_IN addr;
  char buf[256];
  char buf2[300];

  // 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: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
    return 1;
  }
  else
  {
    printf("Socket erstellt!\n");
  }

  // Socket binden
  memset(&addr,0,sizeof(SOCKADDR_IN));
  addr.sin_family=AF_INET;
  addr.sin_port=htons(12345);
  addr.sin_addr.s_addr=ADDR_ANY;
  rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
  if(rc==SOCKET_ERROR)
  {
    printf("Fehler: bind, fehler code: %d\n",WSAGetLastError());
    return 1;
  }
  else
  {
    printf("Socket an port 12345 gebunden\n");
  }

  // In den listen Modus
  rc=listen(acceptSocket,10);
  if(rc==SOCKET_ERROR)
  {
    printf("Fehler: listen, fehler code: %d\n",WSAGetLastError());
    return 1;
  }
  else
  {
    printf("acceptSocket ist im listen Modus....\n");
  }

  // Verbindung annehmen
  connectedSocket=accept(acceptSocket,NULL,NULL);
  if(connectedSocket==INVALID_SOCKET)
  {
    printf("Fehler: accept, fehler code: %d\n",WSAGetLastError());
    return 1;
  }
  else
  {
    printf("Neue Verbindung wurde akzeptiert!\n");
  }

  // Daten austauschen
  while(rc!=SOCKET_ERROR)
  {
    rc=recv(connectedSocket,buf,256,0);
    if(rc==0)
    {
      printf("Server hat die Verbindung getrennt..\n");
      break;
    }
    if(rc==SOCKET_ERROR)
    {
      printf("Fehler: recv, fehler code: %d\n",WSAGetLastError());
      break;
    }
    buf[rc]='\0';
    printf("Client sendet: %s\n",buf);
    sprintf(buf2,"Du mich auch %s",buf);
    rc=send(connectedSocket,buf2,strlen(buf2),0);
  }
  closesocket(acceptSocket);
  closesocket(connectedSocket);
  WSACleanup();
  return 0;
}



int startWinsock(void)
{
  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&wsa);
}

Das kompilieren und linken funktioniert ohne Probleme, aber will ich nun die Nachricht vom Client zum Server schicken, dann kann keine Verbindung hergestellt werden.
Er meldet immer einen error.

Der error passiert an diesem Teil des clients

rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
if(rc==SOCKET_ERROR)
{
printf("Fehler: connect gescheitert, fehler code: %d\n",WSAGetLastError());
return 1;
}
else
{
printf("Verbunden mit 127.0.0.1..\n");
}

Waere echt klasse, wenn einer von euch mir sagen koennte, was den connect verhindert.

mfg

Raptor
 
Ach so, koennte einer mir evtl. sagen, ob es bei euch laeuft?

thx im Vorraus
 
Kann es leider nicht ausprobieren, da ich leider keinen Rechner mit Windows greigbar habe. Aber wenn du vielleicht mal die Fehlermeldung posten würdest, könnte ich dir vielleicht einen Tipp geben.
 
also wenn du den fehler code 10061 beim verbinden des clients bekommst dann liegts wahrscheinlich an der firewall - war jedenfalls grad bei mir so
wenn nicht schreib mal deine genaue fehlermeldung hin
 
genau den fehler bekomme ich....
aber ich hab die firewall(norton inet security 2003) abgeschossen.
evtl. kann ich mich aber nicht auf den taskmanager von winxp verlassen und das ding laeuft doch noch. aber das glaube ich nicht.
funzt es bei euch denn?
 
jo bei mir gehts - also wenns ohne die norton firewall auch nicht läuft, liegts vielleicht an der XP internen firewall
also mal deaktivieren wenn sie bei dir aktiviert ist und dann mal versuchen
 
Zurück
Oben