• STATISTIQUES
  • Il y a eu un total de 2 membres et 14311 visiteurs sur le site dans les dernières 24h pour un total de 14 313 personnes!


    Membres: 2 433
    Discussions: 3 585
    Messages: 32 832
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [EN] Net Force
    Javascript: 9, Java Applets: 6, Cryptography: 16, Exploits: 7, Cracking: 14, Programming: 13, Internet: 15, Steganograph...
    Challenges
    [EN] hax.tor
    50 level de challenges mélangés
    Challenges
    [EN] xda-developers
    Très bon site pour les gros bidouilleurs de smartphone de windows à androïd et de Apple jusqu'...
    Phreaking
    [EN] Listbrain Version 3
    Site proposant 66 challenges présentés dans une liste mélangée.
    Challenges
    [FR] Asp-php
    Tutoriaux sur ASP, PHP, ASP.net, XML, SQL, Javascript, HTML, VML - Scripts et ressources pour webmasters - Forums d&#...
    Programmation
    [FR] Microcontest
    Cryptographie: 7, Mathématiques: 8, Image Son Vidéo: 5, Intelligence artificielle: 3, Réseau: 2, Divers: 7, Phy...
    Challenges
    [EN] Sabre Films
    Site de challenge présenté sous la forme d'une quête. Vous êtes un détective et devrez résoudre d...
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[C] Serveur multi-clients
07-10-2012, 16h52 (Modification du message : 19-11-2012, 19h26 par InstinctHack.)
Message : #1
Creepy_p0ney Hors ligne
chef des poneys voodoo
*



Messages : 146
Sujets : 9
Points: 24
Inscription : Dec 2011
[C] Serveur multi-clients
Bonjour, je cherche à programmer un serveur multiclient en C fonctionnant avec les threads de sorte de faire un tchat sur mon réseau local après, mais je n'y arrive pas je ne comprends pas trop.

merci d'avance
Penser que coder est coder explique-t-il la recursion ?
http://p0neyland.wordpress.com/
+1 (0) -1 (0) Répondre
07-10-2012, 17h14
Message : #2
ark Hors ligne
Psyckomodo!
*****



Messages : 1,033
Sujets : 48
Points: 317
Inscription : Sep 2011
RE: serveur multiclients
Hum... Ça te dirais de donner plus d'infos ? x)
Du genre, tu code dans quel langage, ou est ce que tu bloque exactement,... ?
+1 (0) -1 (0) Répondre
07-10-2012, 17h35 (Modification du message : 07-10-2012, 17h38 par Swissky.)
Message : #3
Swissky Absent
Bon membre
*



Messages : 523
Sujets : 32
Points: 96
Inscription : Apr 2012
RE: serveur multiclients
http://www.cppfrance.com/codes/LOGICIEL-...22779.aspx
http://www.planetsourcecode.com/vb/scrip...2&lngWId=1
http://files.codes-sources.com/fichier.aspx?ID=54135

il parait que Google donne de bons résultats Wink
Ta du C++ et du JAva et VB6 dans les liens plus haut Tongue
+1 (0) -1 (0) Répondre
07-10-2012, 17h39 (Modification du message : 08-10-2012, 20h40 par Di0Sasm.)
Message : #4
Creepy_p0ney Hors ligne
chef des poneys voodoo
*



Messages : 146
Sujets : 9
Points: 24
Inscription : Dec 2011
RE: serveur multiclients
Ark : je code en c, je bloques sur l'acceptation des differents clients et la création du thread
Penser que coder est coder explique-t-il la recursion ?
http://p0neyland.wordpress.com/
+1 (0) -1 (0) Répondre
07-10-2012, 19h12
Message : #5
ark Hors ligne
Psyckomodo!
*****



Messages : 1,033
Sujets : 48
Points: 317
Inscription : Sep 2011
RE: serveur multiclients
Bah, pas grands chose a dire quoi: DOC ! Big Grin

http://franckh.developpez.com/tutoriels/posix/pthreads/
http://broux.developpez.com/articles/c/sockets/

C'est cadeau, ca me fait plaisir Big Grin
Bon courage !
+1 (0) -1 (0) Répondre
07-10-2012, 21h04 (Modification du message : 07-10-2012, 21h06 par Commodor.)
Message : #6
Commodor Hors ligne
Ho ! Dodgson !
*



Messages : 64
Sujets : 9
Points: 36
Inscription : Nov 2011
RE: serveur multiclients
Évite les threads Big Grin
essaye de regarder la fonction Select Wink Si tu bloques à certains endroits n'hésite pas Wink J'ai également fait un chat pour m’exercer et c'est plutôt enrichissant pour mieux cerner les sockets Smile
Hahaha you didn't say the magic word !
+1 (0) -1 (0) Répondre
08-10-2012, 19h03
Message : #7
Creepy_p0ney Hors ligne
chef des poneys voodoo
*



Messages : 146
Sujets : 9
Points: 24
Inscription : Dec 2011
RE: serveur multiclients
T'as fait un tchat ? tu pourras me passer le code source s'il te plaît (si c'est un code comprehensible), sinon t'as fait quoi avec les sockets ?
Penser que coder est coder explique-t-il la recursion ?
http://p0neyland.wordpress.com/
+1 (0) -1 (0) Répondre
08-10-2012, 19h23
Message : #8
Commodor Hors ligne
Ho ! Dodgson !
*



Messages : 64
Sujets : 9
Points: 36
Inscription : Nov 2011
RE: serveur multiclients
je vais fouiller dans mon bordel mais il ne sera pas compréhensible si tu n'as pas vu la fonction select Smile j'essaye de le poster mercredi Wink

Pour ce coup-ci, il est plus intéressant que tu découvres la fonction select par toi même (developpez.net) plutôt que d'essayer de comprendre et recopier une source :p

j'ai pas fait grand chose d'autre. Tout se base sur ce 'tchat'. Sauf qu'à la place d'envoyer des messages le programme effectue certaines actions demandées par le client (comme exécuter des commandes quand je voulais administrer mon système à distance. Même s'il existe d’excellents moyens de le faire sans recorder une app (ssh par ex), le faite de le faire était plutôt enrichissant) Wink

tu verras si tu veux faire un 'tchat' en console, tu auras quelques contraintes plutôt chiantes :p mais je pourrais t'aiguiller sur la meilleurs solution qui me semble la plus approprié
Hahaha you didn't say the magic word !
+1 (0) -1 (0) Répondre
08-10-2012, 19h26
Message : #9
Creepy_p0ney Hors ligne
chef des poneys voodoo
*



Messages : 146
Sujets : 9
Points: 24
Inscription : Dec 2011
RE: serveur multiclients
ç doit être planqué dans ton commodor (désolé je mouurais d'envie de faire cette blague), Ouais j'ai trouvé un tuto sur le sdz avec la func select, parce que en fait j'adore le réseau et tout ça du coup je veux un peu apprendre à tout utiliser avec un langage.
Penser que coder est coder explique-t-il la recursion ?
http://p0neyland.wordpress.com/
+1 (0) -1 (0) Répondre
08-10-2012, 19h32
Message : #10
Commodor Hors ligne
Ho ! Dodgson !
*



Messages : 64
Sujets : 9
Points: 36
Inscription : Nov 2011
RE: serveur multiclients
^^ on me l'avait jamais faite :p

Le tuto sur le sdz est pas trop complet à ce niveau là...

L'utilisation des sockets est vraiment bien quand on la maitrise (je suis très loin de savoir l'utiliser Rolleyes )
Hahaha you didn't say the magic word !
+1 (0) -1 (0) Répondre
08-10-2012, 22h29
Message : #11
Dobry Hors ligne
Tueur de lamouz
*



Messages : 206
Sujets : 25
Points: 73
Inscription : Aug 2011
RE: serveur multiclients
Si je devais conseiller UN lien pour les sockets en C/C++ ca serait http://beej.us/guide/bgnet/output/html/s...bgnet.html, mis à jour avec la venue de l'IPV6, le code est valide fonctionne parfaitement et te montre la "bonne" façon de faire un programme utilisant les sockets (je dis ca, car souvent les programmes "tout fait" trouvé sur google datent un peu et ne le font pas forcement d'une manière très efficace par rapport au fonctions dont on dispose ajourd'hui.
Aestuārium Erudītiōnis

There are only two hard things in Computer Science: cache invalidation, naming things, and off-by-one errors.
+1 (0) -1 (0) Répondre
08-10-2012, 22h47
Message : #12
Commodor Hors ligne
Ho ! Dodgson !
*



Messages : 64
Sujets : 9
Points: 36
Inscription : Nov 2011
RE: serveur multiclients
Ha merci c'est toujours bon à prendre Blush
Hahaha you didn't say the magic word !
+1 (0) -1 (0) Répondre
09-10-2012, 19h28 (Modification du message : 09-10-2012, 19h28 par Creepy_p0ney.)
Message : #13
Creepy_p0ney Hors ligne
chef des poneys voodoo
*



Messages : 146
Sujets : 9
Points: 24
Inscription : Dec 2011
RE: serveur multiclients
Le lien que tu asdonné est mort, mais je l'ai déjà lu donc c'est pas grâve donc voilà où j'en suis
Code :
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
typedef struct
{
   int sock;
   char name[64];
}Client;
int main(){
    
    
    int reals;
    int sin_size;
    int sockfd;
    struct sockaddr_in their_addr[5];
    int i=0;
    int ret=0;
    char buf[64];
    char *pass[5];
    char *pseudo[5];
    char msg[64];
    int k=0;
    int m=0;
    int max=0;
    Client clients[5];
    fd_set fd;
    fd_set cfd;
    struct sockaddr *addr;
    char *log="tim";
    struct sockaddr_in my_addr;
    pid_t pid;
    if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0){
        perror("socket");
        exit(1);
    }
    my_addr.sin_family=AF_INET;
    my_addr.sin_port=htons(2300);
    my_addr.sin_addr.s_addr=INADDR_ANY;
    
    if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr_in))<0){
        perror("bind");
        exit(1);
    }
    listen(sockfd,5);
    printf("attente d'un client");
    sin_size = sizeof(struct sockaddr_in);
    printf("%d\n",i);
    while(1){
        int l=0;
        int n=0;
        
        FD_ZERO(&fd);
        FD_SET(sockfd,&fd);
        for(l=0;l<=i;l++){
            FD_SET(clients[l].sock,&fd);
        }
        printf("nous y sommes3\n");
        for(n=0;n<=i;n++){
            if(max<clients[n].sock){
                max=clients[n].sock;
            }
        }
        if(max<sockfd)
            max=sockfd;
        printf("%d",max);
        if((ret=select(max,&fd,NULL,NULL,NULL))==-1){
            perror("select");
            exit(1);
        }
        printf("nous y sommes2\n");
        if(FD_ISSET(sockfd,&fd)){
            printf("here we are\n");
            sin_size=sizeof(struct sockaddr_in);
            clients[i].sock=accept(sockfd,(struct sockaddr *)&their_addr[i],&sin_size);
            send(clients[i].sock,"login :",64,0);
            reals=recv(clients[i].sock,buf,64,0);
            buf[reals]='\0';
            strncpy(clients[i].name, buf, 64 - 1);            
            i++;
            
        }
        else if(ret==0){
            printf("problem?");
        }
        else{
            printf("here we are9");
            for(k=0;k<=i;k++){
                if(FD_ISSET(clients[k].sock,&fd)){
                    int j=0;
                    printf("here we are5\n");
                    reals=recv(clients[k].sock,buf,64,0);
                    printf("here we are6\n");
                    if(reals==0){
                        close(clients[k].sock);
                        i--;
                    }    
                    else{    
                        buf[reals]='\0';
                        printf("%s",buf);
                        printf("here we are7\n");
                        strncpy(msg,clients[k].name,64-1);
                        strncat(msg,buf,64-strlen(msg)-1);
                        printf("here we are8\n");
                        for(j=0;j<=i;j++){
                            send(clients[j].sock,msg,64,0);
                        }
                    }
                }
            }
        }

    }        
        


    
}
je galere avec les pseudos donc j'ai fait comme ça (c'est pas grâve comme c'est en local)
*edit j'ai réussi pour les pseudos, mais y'a quelques gros bugs (peut être parce que je test 2 clients sur le même pc) maissi t'as ton code commodor je le veux bien
Penser que coder est coder explique-t-il la recursion ?
http://p0neyland.wordpress.com/
+1 (0) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [C] serveur irc (non terminé) fr0g 0 706 21-05-2014, 22h27
Dernier message: fr0g
  [C] Un mini-serveur HTTP -Moloch- 11 3,328 19-04-2013, 14h22
Dernier message: notfound
  [C] Socket Client-Serveur -> Write() + Read() sakiir 7 1,991 18-03-2013, 07h19
Dernier message: sakiir
  [C] Programme Serveur/Client Creepy_p0ney 1 953 13-10-2012, 14h13
Dernier message: Creepy_p0ney

Atteindre :


Utilisateur(s) parcourant ce sujet : 13 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut