• STATISTIQUES
  • Il y a eu un total de 0 membres et 36189 visiteurs sur le site dans les dernières 24h pour un total de 36 189 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Comment ca marche
     Gratuit et accessible à tous, ce site de communauté permet de se dépanner, se faire aider ...
    Webmaster
    [FR] Root-me
    Script: 5, Système: 20, Cracking: 16, Cryptanalyse: 17, Programmation: 8, Réaliste: 11, Réseau: 10, Stéganog...
    Challenges
    [FR] Hackfest
    Le Hackfest est un évènement de sécurité et de piratage informatique au Québec reg...
    Hacking
    [FR] Asp-php
    Tutoriaux sur ASP, PHP, ASP.net, XML, SQL, Javascript, HTML, VML - Scripts et ressources pour webmasters - Forums d&#...
    Programmation
    [EN] CS Tutoring Center
    Site de challenge spécialisé dans les challenges de programmation C++ et java cependant, d'autres langages pe...
    Challenges
    [EN] Astalavista
    JavaScript: 1, Exploit: 2, Crypto: 34, CrackIt: 15, Stegano: 8, Programming: 12, Logic: 36, Special: 6, Science: 4, Info...
    Challenges
    [FR] Le top web
    Nous offrons une sélection la plus large possible de resources webmaster gratuites, hébergement gratuit...
    Webmaster

  • 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] Programme Serveur/Client
13-10-2012, 14h13
Message : #2
Creepy_p0ney Hors ligne
chef des poneys voodoo
*



Messages : 146
Sujets : 9
Points: 24
Inscription : Dec 2011
RE: an other thing about sockets
Ok donc après une bonne aide de super snail j'en suis ici :
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 argc, char** argv){


      int reals;
      int sin_size;
      int sockfd;
      struct sockaddr_in their_addr[5];
      int i=0;
      int ret=0;
      char buf[64];
      char msg[64];
      int k=0;
      int m=0;
      int max=0;
      Client clients[5];
      fd_set fd;
      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(atoi(argv[1]));
      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("Socket %d\n",max);
        if((ret=select(max+1,&fd,NULL,NULL,NULL))==-1){
          perror("select");
          exit(1);
        }
        // On regarde si le dernier socket a des données
        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 :",8,0);
          reals=recv(clients[i].sock,buf,64,0);
          buf[reals]='\0';
          strncpy(clients[i].name, buf, 64 - 1);
          printf("%s", buf);
          i++;

        }
        else if(ret==0){
          printf("problem?");
        }
        else{
          // Le dernier socket n'a pas de données, on regarde les autres
          for(k=0;k<i;k++){
            if(FD_ISSET(clients[k].sock,&fd)){
              // Données présentes
              int j=0;
              reals=recv(clients[k].sock,buf,64,0);

              // Code foireux de fermeture de socket (condition jamais vraie,
              // et que se passe-t-il si le premier client ferme ?)
              if(reals==0){
                close(clients[k].sock);
                i--;
              }
              else{
                buf[reals]='\0';
                printf("%s",buf);
                memset(msg, 0, 64);
                strncpy(msg,clients[k].name,64-1);
                strncat(msg,buf,64-strlen(msg)-1);
                // envoi des données à tous les clients
                for(j=0;j<i;j++){
                  send(clients[j].sock,msg,64,0);
                }
              }
            }
          }
        }

      }




    }
pour le serveur et ici pour le client :
Code :
#if defined (WIN32)
    #include <winsock2.h>
        
    #elif defined (linux)
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <unistd.h>
        
    #endif
        
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
        
        
        
    int main(int argc, char** argv){
    #if defined (WIN32)
      WSADATA WSAData;
      int erreur = WSAStartup(MAKEWORD(2,2), &WSAData);
    #else
      int erreur = 0;
    #endif
        
      struct sockaddr_in my_addr;
      int sockfd;
      char buffer[64];
      char buf[64];
      int reals=0;
      int ret=0;
      fd_set fd;
      sockfd=socket(AF_INET,SOCK_STREAM,0);
        
      my_addr.sin_family=AF_INET;
      my_addr.sin_port=htons(2300);
      my_addr.sin_addr.s_addr=inet_addr("192.168.1.12");
      printf("%d",connect(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr)));
    
      while(1){
      
        FD_ZERO(&fd);
        FD_SET(sockfd,&fd);
        if(select(sockfd+1, &fd, NULL, NULL, NULL) == -1){
          printf("Select failed on socket I/O");
          return -1;
        }
      
        if(FD_ISSET(sockfd, &fd)) {
          reals=recv(sockfd,buf,64,0);
          if(reals==0){
            printf("mother fucking problem!!!");
          }
          printf("%s",buf);
        }
      
        fgets(buffer, 64 - 1, stdin);
        {    
               char *p = NULL;
                p = strstr(buffer, "\n");
                if(p != NULL)
               {
                       *p = 0;
                }
                else
                {
                   /* fclean */
                       buffer[64- 1] = 0;
                }
    }
    send(sockfd,buffer,64,0);
      }
qui marche chez supersnail mais pas chez moi
Penser que coder est coder explique-t-il la recursion ?
http://p0neyland.wordpress.com/
+1 (0) -1 (0) Répondre


Messages dans ce sujet
[C] Programme Serveur/Client - par Creepy_p0ney - 10-10-2012, 15h28
RE: an other thing about sockets - par Creepy_p0ney - 13-10-2012, 14h13

Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [C] serveur irc (non terminé) fr0g 0 101 21-05-2014, 22h27
Dernier message: fr0g
  [C-AIDE] Fuzzer De Programme sakiir 2 214 16-05-2013, 11h21
Dernier message: Sh4dows
  [C] Un mini-serveur HTTP -Moloch- 11 634 19-04-2013, 14h22
Dernier message: notfound
  [C] Programme de hashage Junky 1 257 23-03-2013, 12h11
Dernier message: Junky
  [C] Socket Client-Serveur -> Write() + Read() sakiir 7 447 18-03-2013, 07h19
Dernier message: sakiir
  [C] Serveur multi-clients Creepy_p0ney 12 601 09-10-2012, 19h28
Dernier message: Creepy_p0ney

Atteindre :


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