Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème socket!

    30 avril 2006 à 18:56:39

    Salut à tous! :)
    J'ai eu pour idée de réaliser un petit serveur tout simple qui envoi un Hello World au client qui s'y connectent.
    Apres avoir planché sur pleins de tutos, je me suis lancé dans le vif du sujet mais je coince au moment de compiler. :colere2:
    J'utilise dev c++ et j'ai bien rajouté dans l'éditeur de lien la ligne "-lws2_32"

    Les erreurs renvoyées sont les suivantes:
    multiple definition of `main'
    first defined here
    ld returned 1 exit status
    D:\Divers\c\projet\reseau\Makefile.win [Build Error] [Projet1.exe] Error 1

    Les sources sont les suivantes;

    Client:

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


    int main()
    {
    char buff[500];
       
    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,0), &WSAData);

    SOCKET sock;
    SOCKADDR_IN sin;
    sin.sin_addr.s_addr = inet_addr("127.0.0.1");
    sin.sin_family = AF_INET;
    sin.sin_port = htons(4148);//port
    sock = socket(AF_INET,SOCK_STREAM,0);
    bind(sock, (SOCKADDR *)&sin, sizeof(sin));

    connect(sock, (SOCKADDR *)&sin, sizeof(sin));

    recv(sock, buff, sizeof(buff), 0);

    }




    Le serveur:

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


    int main()
    {
    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,0), &WSAData);
    SOCKET sock;
    SOCKET csock;
    SOCKADDR_IN sin;
    SOCKADDR_IN csin;
    sock = socket(AF_INET, SOCK_STREAM, 0);
    sin.sin_addr.s_addr               = INADDR_ANY;
    sin.sin_family = AF_INET;
    sin.sin_port = htons(4148);
    bind(sock, (SOCKADDR *)&sin, sizeof(sin));
    listen(sock, 0);
    while(1)
    {
    int sinsize = sizeof(csin);
    if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
    {
    send(csock, "Hello world!\r\n", 14, 0);
    }
    }
    }




    J'aurais juste aussi une autre question rapidos! :p
    Pour récupérer le texte reçu un simple
    printf("Chaine buff vaut : %c", buff);
    suffit apres le
    recv(sock, buff, sizeof(buff), 0);
    ?


    Je vous remercie par avance pour vos réponses! :-°
    • Partager sur Facebook
    • Partager sur Twitter
      30 avril 2006 à 19:08:22

      Salut, est-ce que les 2 fichier sont dans le même projets?
      • Partager sur Facebook
      • Partager sur Twitter
        30 avril 2006 à 19:10:55

        Citation : [Kansuu]

        Salut, est-ce que les 2 fichier sont dans le même projets?




        Oui il le sont.
        • Partager sur Facebook
        • Partager sur Twitter
          30 avril 2006 à 19:12:31

          Citation : Voldo

          Citation : [Kansuu]

          Salut, est-ce que les 2 fichier sont dans le même projets?




          Oui il le sont.


          Bah voila le problème :lol: Il faut faire un projet pour le serveur et un autre pour le client. Server et client son 2 executable différents.
          • Partager sur Facebook
          • Partager sur Twitter
            30 avril 2006 à 19:14:07

            Citation : [Kansuu]

            Citation : Voldo

            Citation : [Kansuu]

            Salut, est-ce que les 2 fichier sont dans le même projets?




            Oui il le sont.


            Bah voila le problème :lol: Il faut faire un projet pour le serveur et un autre pour le client. Server et client son 2 executable différents.





            OH mais quesque je suis con :D
            Merci beaucoup
            *va se pendre* :-°
            • Partager sur Facebook
            • Partager sur Twitter
              30 avril 2006 à 19:17:53

              La mort n'est pas une bonne solution, je proposerais plutôt une bonnne rédak' :p
              • Partager sur Facebook
              • Partager sur Twitter
                30 avril 2006 à 19:17:59

                Sinon, n'utilises pas bind() pour le client et c'est %s dans le printf() si tu veux afficher une chaine.
                Je ne sais pas si le memset() à 0 est obligatoire pour les champs de SOCKADDR_IN que tu n'utilises pas, tu devrais vérifier...

                Pour plus d'infos sur les sockets, un petit récapitulatif que j'avais écrit :
                http://www.games-creators.org/wiki/Différence_SDL_net_sockets
                • Partager sur Facebook
                • Partager sur Twitter
                  30 avril 2006 à 19:28:16

                  Apres recherche j'ai compris l'histoire du bind par contre m'affiche toujours rien :D

                  Ah petit détaille:
                  Je teste sur mon propre pc avec pour ip du client 127.0.0.1 ca devrait normalement marcher en lancant serveur et client en meme temps?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    1 mai 2006 à 0:06:19

                    Citation : Voldo

                    Je teste sur mon propre pc avec pour ip du client 127.0.0.1 ca devrait normalement marcher en lancant serveur et client en meme temps?


                    Oui. Tu peux même utiliser ton IP réseau...

                    http://mapage.noos.fr/emdel/reseaux.htm

                    Le premier paramètre de socket() est Protocol Family (PF_xxx).

                    Malgré ce qu'on peut lire un peu partout, ce n'est donc pas AF_INET, mais PF_INET.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Music only !
                      1 mai 2006 à 0:55:08

                      Sinon, quelqu'un saurait si cette librairie est portable, et si quelqu'un aurait un tuto ce srait hyper cool (évidemment je vais chercher quand même) , merci !
                      • Partager sur Facebook
                      • Partager sur Twitter
                        1 mai 2006 à 8:55:15

                        Ben winsock y a win dedans donc forcément c'est pas portable. Pour une alternative multiplateforme, chercher du côté de SDL_Net.

                        Sinon pour ce qui est du tuto :

                        Sockets UNIX

                        Après les chapitres sur TCP/IP il y a un chapitre "les sockets de Berkeley".
                        • Partager sur Facebook
                        • Partager sur Twitter
                          1 mai 2006 à 10:17:48

                          Citation : mleg

                          Ben winsock y a win dedans donc forcément c'est pas portable.


                          winsock2 est très portable... Il y a juste l'init et la fin de WSA en plus...

                          Mais OK pour SDL_net.


                          • Partager sur Facebook
                          • Partager sur Twitter
                          Music only !
                            1 mai 2006 à 11:11:53

                            Citation : -ed-

                            Citation : Voldo

                            Je teste sur mon propre pc avec pour ip du client 127.0.0.1 ca devrait normalement marcher en lancant serveur et client en meme temps?


                            Oui.


                            Pas si ya le bind() dans le client, mais sinon c'est bon.

                            Sinon, c'est quoi le problème ? (maintenant)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              10 août 2006 à 16:26:39

                              Ca un peu trop le copier coller du programme serveur client sur ce site... http://c.developpez.com/WalrusSock/

                              Le client et le serveur c'est pas toi qui la programmer mais plûtôt The Walrus

                              pfff...
                              Que des copieur de nos jours...
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Problème socket!

                              × 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