Win Sockets



  • das tutorial von c-workers funktioniert, ich habe es selbst auch mal durchgearbeitet,...
    nimm mal <windoof.h> raus, dann sollte es laufen,..
    gruß



  • Ahhh jetzt gehts :xmas1:

    thx



  • Server:

    #include <winsock2.h>
    
    #include <stdio.h>
    //Prototypen
    
    int startWinsock(void);
    int main()
    
    {
    
      long rc;
    
      SOCKET acceptSocket;
      SOCKET connectedSocket;
      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: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
    
        return 1;
    
      }
    
      else
    
      {
    
        printf("Socket erstellt!\n");
    
      }
    
    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");
    
    }
    
    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"); 
    
    }
    
    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");
    
    }
    
      system("PAUSE");
      return 0;
    
    }
    
    int startWinsock(void)
    
    {
    
      WSADATA wsa;
    
      return WSAStartup(MAKEWORD(2,0),&wsa);
    
    }
    

    und da hätte ich noch eine frage ist das Tutorial überhaupt für den Einstieg in die Win Sock Programmierung geeignet ?

    http://www.c-worker.ch/tuts/wstut_op.php#einleitung



  • ach mom da fehlt was -.-



  • toll mein source code is angeblich spam also der vom clinet -.-



  • Eigentlich sollte bei dem Client folgendes stehen:

    Winsock gestartet!
    Socket erstellt!
    Verbunden mit 127.0.0.1..

    aber da steht immer:

    Fehler: connect gescheitert, fehler code: 10061

    halt der Fehlercode



  • Source Code vom client:

    #include <winsock2.h>

    #include <stdio.h>
    //Prototypen

    int startWinsock(void);
    int main()

    {

    long rc;

    SOCKET acceptSocket;
    SOCKET connectedSocket;
    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: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());

    return 1;

    }

    else

    {

    printf("Socket erstellt!\n");

    }

    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");

    }

    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");

    }

    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");

    }

    system("PAUSE");
    return 0;

    }

    int startWinsock(void)

    {

    WSADATA wsa;

    return WSAStartup(MAKEWORD(2,0),&wsa);

    }



  • Ok, der source vom client sieht ok aus,..
    trivialer weise erstmal ne frage: server gestartet??

    gruß



  • zeusosc schrieb:

    Ok, der source vom client sieht ok aus,..

    Ich würde sagen, der Code vom Client sieht genauso aus wie der Code des Servers...



  • Ja den Server hab ich gestartet.



  • Hier ist der Server:

    #include <winsock2.h>
    
    #include <stdio.h>
    //Prototypen
    
    int startWinsock(void);
    int main()
    
    {
    
      long rc;
    
      SOCKET acceptSocket;
      SOCKET connectedSocket;
      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: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
    
        return 1;
    
      }
    
      else
    
      {
    
        printf("Socket erstellt!\n");
    
      }
    
    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");
    
    }
    
    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"); 
    
    }
    
    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");
    
    }
    
      system("PAUSE");
      return 0;
    
    }
    
    int startWinsock(void)
    
    {
    
      WSADATA wsa;
    
      return WSAStartup(MAKEWORD(2,0),&wsa);
    
    }
    


  • Jo,...
    stimmt, das was du als client gepostet hast ist in wirklichkeit der server,...

    da fehlt wohl das connect,..
    edit: hier ein beispiel client (auch 127.0.0.1:12345)

    #include <winsock2.h>
    #include <stdio.h>
    #include <iostream>
    #include <string>
    #include <conio.h>
    #include <sstream>
    using namespace std;
    
    //Prototypen
    int startWinsock(void);
    string int_to_str(int i)
    {
    ostringstream ret;
    ret << i;
    return ret.str();	
    }
    string replace(string inputS, string oldC, string newS){
        string retValS = "";
        int pos = inputS.find(oldC);
        for(int i = 0; i < pos; ++i){
            retValS += inputS[i];
        }
        retValS += newS;
        for(int i = pos +1; i < inputS.length(); ++i){
            retValS += inputS[i];
        }
    
        return retValS;
    }
    
    int main()
    {
      long rc;
      SOCKET s;
      SOCKADDR_IN addr;
      char buf[256];
      char buf2[4096];
      string ip;
      ip="";
     char lala[]={0x56,0x56,0x20,0x56,0x56};
      // 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");
      }
      printf("bitte geben sie die ip ein:\n");
      cin>>ip;
      // 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(ip.c_str()); // 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");
      }
    
    for(int i=0;i<=sizeof(buf)-5;i++){buf[i]='1';}
    string temp;
      // Daten austauschen
      while(rc!=SOCKET_ERROR)
      {
    
    	printf("\nZeichenfolge eingeben [max 256]: ");
    
    	cin>>ip;
    	/*ip=replace(ip," \0"," ");
    	cout<<ip;*/
    
    	//for(int i=0; i<=20;i++){
        //temp=ip.substr(i,256);
    	int pos=ip.find(0x20); if(pos!=string::npos){ip[pos]='&';}
    	cout<<pos<<":"<<ip;
    	getch();
    	send(s,ip.c_str(),20,0);
    	//send(s,buf,256,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);
    }
    

    gruß



  • Jetzt hats funktioniert 🙂

    thx :xmas1:


Anmelden zum Antworten