• STATISTIQUES
  • Il y a eu un total de 1 membres et 3556 visiteurs sur le site dans les dernières 24h pour un total de 3 557 personnes!


    Membres: 2 450
    Discussions: 3 572
    Messages: 32 822
    Tutoriels: 77
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [EN] social-engineer
    Site dédié au Social Engineering en général.
    Hacking
    [EN] Packet Storm
    Packet Storm est un site qui combine nouvelles de la sécurité informatique, téléchargemen...
    Vulnérabilités
    [FR] Le site du zero
    Découvrez gratuitement la programmation (C, C++, PHP, MySQL, XHTML, CSS...), Linux, le Mapping, la modé...
    Programmation
    [EN] Hack This Site
    Hack This Site est considéré comme un réel terrain d'entraînement légal pour le...
    Hacking
    [FR] Root-Me
    Notre équipe se base sur un constat : à l'heure actuelle ou l'information tend à devenir...
    Hacking
    [EN] PHPFreaks
    PHPFreaks est un site dédié à l'apprentissage et l'enseignement du PHP. Ici vous trouver...
    Programmation
    [FR] Developpez.net
    Un forum communautaire qui se veut pour les développeurs en générale. Avec presque 500 000 membr...
    Programmation

  • 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
10-10-2012, 15h28 (Modification du message : 19-11-2012, 19h25 par InstinctHack.)
Message : #1
Creepy_p0ney Hors ligne
chef des poneys voodoo
*



Messages : 146
Sujets : 9
Points: 24
Inscription : Dec 2011
[C] Programme Serveur/Client
Salut,j'ai donc réusi à programmer mon serveur multi clients, mais le problème se pose pour le client car en effet, mon clients fonctionne quand je me connecte au serveur (qui est sur mon linux) avec le client(qui est sur mon linux) le truc c'est que quand je me connecte avec mon client sous win ça ne fonctionne pas!! (il envoie les données mais ne les reçoit pas).

voici le code de mon srv
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 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(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+1,&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);
                        }
                    }
                }
            }
        }

    }        
        


    
}

celui de mon client win :
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(){
#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;
    int reals=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");
    connect(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr));

    while(1){

        FD_ZERO(&fd);
        FD_SET(STDIN_FILENO, &fd);
        FD_SET(sockfd,&fd);
        select(sockfd+1,&fd,NULL,NULL,NULL);

         if(FD_ISSET(STDIN_FILENO, &fd))
              {

                 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);
                 }
            else {
                reals=recv(sockfd,buf,64,0);
                if(reals==0){
                    printf("mother fucking problem!!!");
                }
                puts(buf);
            }
        }




    #if defined (WIN32)
        WSACleanup();
    #endif

    return EXIT_SUCCESS;



}
Penser que coder est coder explique-t-il la recursion ?
http://p0neyland.wordpress.com/
+1 (0) -1 (0) Répondre
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


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

Atteindre :


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