Partage
  • Partager sur Facebook
  • Partager sur Twitter

Winsock2

Sujet résolu
Anonyme
    26 juillet 2006 à 1:56:38

    Petit problème: quand je met l'IP 127.0.0.1, ce code ne fonctionne pas. Pourriez vous m'aider ?

    #include <windows.h>
    #include <winsock2.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int main()
    {
        system("color 0A");

        // Initialisation de variables
        int i, continuer = 1;
        char text[100];
        char recu[100];
        for (i = 0; i < 100; i++)
        {
            text[i] = 0;
            recu[i] = 0;
        }

        // Demande l'IP.
        printf("Entrez l'IP chez qui vous voulez vous connecter: ");
        scanf("%s", text);

        // Initialisation de winsock
        WSADATA WSAData;
        WSAStartup(MAKEWORD(2,0), &WSAData);

        // Création du socket
        SOCKET sock;
        SOCKADDR_IN parametres;
        parametres.sin_addr.s_addr = inet_addr(text);
        parametres.sin_family = AF_INET;
        parametres.sin_port = htons(4148);
        sock = socket(AF_INET,SOCK_STREAM,0);
        bind(sock, (SOCKADDR *)&parametres, sizeof(parametres));

        // Main loop
        while (continuer && strcmp(text, "exit") != 0)
        {
            fflush(stdin);
            printf("\nYou: ");
            scanf("%s", text);
            send(sock, text, 99, 0);
            recv(sock, recu, sizeof(recu), 0);
            printf("\nHim: %s", recu);
        }

        closesocket(sock);
        WSACleanup();
    }


    Merci d'avance ^^ !
    • Partager sur Facebook
    • Partager sur Twitter
      26 juillet 2006 à 10:38:04

      Dire "Aidez-moi, sa marche pas" ne nous permet pas vraiment de t'aider ! ^^
      En quoi ca ne fonctionne pas ? Ca ne compile pas ? Ca compile mais ca plante ?
      Explique ..
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        26 juillet 2006 à 16:24:10

        Cela compile, mais lorsque je met 127.0.0.1 pour l'IP, le texte qu'on envoie est différent de celui qu'on reçoit.
        • Partager sur Facebook
        • Partager sur Twitter
          26 juillet 2006 à 17:07:57

          Ilm faut faire les fonctions suivantes : liste, accept, connect.
          Voir : http://c.developpez.com/WalrusSock/
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            26 juillet 2006 à 17:21:56

            Merci beaucoup mais c'est justement là où j'apprend ^^ !
            • Partager sur Facebook
            • Partager sur Twitter
              26 juillet 2006 à 18:23:14

              Alors, d'après moi :
              - Remplacer SOCKET par int.
              - Remplacer SOCKADDR_IN par struct sockaddr_in.
              - Utiliser gethostbyname().
              - Et bien sûr utiliser connect() à la place de bind(), là c'est pas bon du tout.

              Ce qui nous donne :
              #include <stdio.h>
              #ifdef __WIN32__
                  #include <winsock2.h>
              #else
                  #include <sys/types.h>
                  #include <sys/socket.h>
                  #include <sys/param.h>
                  #include <netinet/in.h>
                  #include <arpa/inet.h>
                  #include <signal.h>
                  #include <netdb.h>
                  #include <errno.h>
                  #include <unistd.h>

                  #define closesocket close
              #endif

              int main()
              {
                  // Initialisation de variables
                  int i, continuer = 1;
                  char text[100];
                  char recu[100];
                  for (i = 0; i < 100; i++)
                  {
                      text[i] = 0;
                      recu[i] = 0;
                  }

                  // Demande l'IP.
                  printf("Entrez l'IP chez qui vous voulez vous connecter: ");
                  scanf("%s", text);

                  // Initialisation de winsock
              #ifdef __WIN32__
                  WSADATA WSAData;
                  WSAStartup(MAKEWORD(2,0), &WSAData);
              #endif

                  // Création du socket
                  int sock;
                  struct sockaddr_in parametres;
                  struct hostent* h = gethostbyname(text);
                  adresse.sin_addr = *((struct in_addr *)h->h_addr);
                  parametres.sin_family = AF_INET;
                  parametres.sin_port = htons(4148);
                  sock = socket(AF_INET,SOCK_STREAM,0);
                  connect(sock, (struct sockaddr*)&parametres, sizeof(parametres));

                  // Main loop
                  while (continuer && strcmp(text, "exit") != 0)
                  {
                      fflush(stdin);
                      printf("\nYou: ");
                      scanf("%s", text);
                      send(sock, text, 99, 0);
                      recv(sock, recu, sizeof(recu), 0);
                      printf("\nHim: %s", recu);
                  }

                  closesocket(sock);
              #ifdef __WIN32__
                  WSACleanup();
              #endif
              }
              • Partager sur Facebook
              • Partager sur Twitter

              Winsock2

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown