samedi 6 février 2016

[RE] Mini chat en C ! (avec les sockets !)

Salut à tous ! J'ai finalement décidé de progresser avec les sockets en C (le début du tuto était vraiment lent et ennuyant mais j'ai finalement percé :cool:)

J'ai donc décidé de faire un mini chat ! (j'ai vu qu'il y avait un sujet dessus mais le code était vraiment différent et beaucoup plus compliqué :s

Bref, j'ai fait en sorte d'être le plus clair parce que lire et corriger un code concernant les sockets n'est JAMAIS amusant ou facile !

Côté serveur !

Code:

int main (void)
{
    // Je déclare mes variables !
    SOCKET Masock;
    SOCKADDR_IN Monaddresse;
   
    SOCKET clientsock;
    SOCKADDR_IN clientaddresse;

    char message[200] = "Connexion etablie !!!";
    char clientmessage[200]="";

    int taille=sizeof(Monaddresse);
    int tailleclient = sizeof(clientaddresse);

    int erreur=0;
    int    i=1;
    // fin de la déclaration !

    Masock = socket(AF_INET, SOCK_STREAM, 0); //création de la socket
    if(Masock != INVALID_SOCKET)
    {
        //configuration de la socket
        Monaddresse.sin_addr.s_addr    = htonl(INADDR_ANY);
        Monaddresse.sin_family        = AF_INET;
        Monaddresse.sin_port          = htons(23);
        erreur= bind(Masock, (SOCKADDR*)&Monaddresse,taille);
       
          //fini !

        if(erreur!= SOCKET_ERROR)
        {

            erreur= listen(Masock, 5);
            if(erreur!= SOCKET_ERROR)
            {

              // on attends que quelqu'un se connecte :p
                clientsock = accept(Masock, (SOCKADDR*)&clientaddresse, &tailleclient);
              // quelqu'un s'est connecté ! :D


                    if(erreur!= SOCKET_ERROR)
                    {
                        while(i)
                        {
                        send(clientsock, message, 200, 0); //j'envoie le message: "connexion établie !"
                        printf("Chaine envoyee : %s\n\n", message); 
                        lire(message,200); //un simple gets amélioré (je demande ce que je veux envoyer au client ensuite)                         

 /* je ne peux recevoir un message qu'après en avoir envoyé un, mais ce n'est pas le problème pour                                                le  moment*/
                            if(recv(Masock, clientmessage, 200, 0) != SOCKET_ERROR)
                                {
                                    printf("Recu : %s \n",clientmessage);
                                }
                         
                       
                        }

Bon, ce code est plutôt simple, je l'ai simplifié au maximum !

Côté client !

Code:

int main(void)
{
//déclaration des variables ! 
    int i=1;
    SOCKET serversock;
    SOCKADDR_IN serveraddr;
    SOCKET Masock;
    SOCKADDR_IN Masin;
    char buffer[200] = "";
    char message[200]="connexion etablie avec le serveur";
// fin de la déclaration des variables
   
        sock = socket(AF_INET, SOCK_STREAM, 0);

        sin.sin_addr.s_addr = inet_addr("127.0.0.1");
        sin.sin_family = AF_INET;
        sin.sin_port = htons(PORT);
// pas de bind car c'est le client :p

        if(connect(sock, (SOCKADDR*)&sin, sizeof(sin)) != SOCKET_ERROR) // on essaye de se connecter !
        {
            while(i)
            {
           
            if(recv(sock, buffer, 200, 0) != SOCKET_ERROR)
                    {
                            printf("Recu : %s \n", buffer); // on affiche ce que l'on reçoit
                    }

            erreur= send(serversock, message, 200, 0); //l'erreur est ici je suppose.
                   

                    if(erreur)/*La fonction retourne SOCKET_ERROR en cas d'erreur, sinon elle retourne le nombre d'octets envoyés.*/
                    {
                            printf("NOMBRE D OCTET ENVOYES: %d\n",erreur);
                    }
                    printf("Chaine envoyee : %s\n\n", message); // on montre ce qu'on a envoyé.

                   
                    lire(message,200); // on demande ce que l'utilisateur veut envoyer.
            }
        }

voila a quoi ressemble un echange.
Capture.jpg

Ce serait vraiment génial si quelqu'un pourrait me dire quel est le problème !
Images jointes


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1ogNpJj
via IFTTT

Aucun commentaire:

Enregistrer un commentaire