N-PN White-Hat Project
[C] Socket Client-Serveur -> Write() + Read() - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Programmation (https://dev.n-pn.fr/forum/forumdisplay.php?fid=72)
+--- Forum : Langages compilés (https://dev.n-pn.fr/forum/forumdisplay.php?fid=25)
+--- Sujet : [C] Socket Client-Serveur -> Write() + Read() (/showthread.php?tid=2805)



[C] Socket Client-Serveur -> Write() + Read() - sakiir - 15-03-2013

Hello alors je partage mon code .
systeme de client-Serveur en C donc , assez simple .
j'obtient un truc assez louche , si quelqun a une idée ? :')

server.c :
Code :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define PORT 5555
#define IP "192.168.0.19"

int main(int argc,char **argv)
{
  char buf[1024];
  int server_socket;
  struct sockaddr_in server_name;
  int client_socket;

  printf("[*] SOCKET CREATING ..\n");
  if(-1 == (server_socket = socket(PF_INET,SOCK_STREAM,0)))
    {
      /*
    Echec de Socket()
      */
    }

  printf("[*] MEMORY INITIALIZING..\n");
  /* Initiation De l'espace memoir de la socket */
  memset( (char *) &server_name,0, sizeof server_name);

  server_name.sin_family = AF_INET;
  server_name.sin_port = htons(PORT);

  printf("[*] IP CONVERTING..\n");
  if(0 == inet_aton(IP,&(server_name.sin_addr)))
    {
      /*
    Echec de la convertion de l'adresse IP
      */    
    }

  printf("[*] NAME GIVING..\n");
  /*Attribution d'un nom*/
  if(-1 ==
     (bind
      (server_socket,
       (struct sockaddr *) &server_name,
       sizeof server_name)))
    {
      /*
    Echec de l'attributioon d'un nom à la socket
      */
    }
  
  printf("[*] LISTENNING..\n");
  /*Socket En Ecoute ..*/
  if(-1 == (listen(server_socket,0)))
    {
      /*
     Echec De l'ecoute ..
      */
    }
  

  if(-1 == (client_socket = accept(server_socket,NULL,0)))
    {
      /*
    Ipossible d'attribuer un ID a la socket du client connecté.
      */
    }
  printf("[+] CONNECTED !\n");  
  printf("[+] READING MESSAGE\n");
  
  if(-1 == read(client_socket,buf,1000)){
    printf("[-] FAILED TO READ() .. \n");
    exit(1);
      }
      printf("[+] MESSAGE RECEIVED : %s\n",buf);
  
  /* Fermeture de la socket du client  */
  shutdown(client_socket,2);
  close(client_socket);

  /* Fermeture de la socket du serveur */
  shutdown(server_socket,2);
  close(server_socket);


}
client.c
Code :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define IP "192.168.0.19"
#define PORT 5555

int main(int argc,char **argv)
{
  if(argc != 2){
    printf("Usage : %s <messagetoSend>\n",argv[0]);
    exit(0);
  }

  char tosend[1024];
  int taille = strlen(tosend);
  strncpy(tosend,argv[1],1023);
  int client_socket;
  struct sockaddr_in sin;

  if(-1 == (client_socket = socket(PF_INET,SOCK_STREAM,0)))
    {
      printf("[-] socket() FAILED\n");
      /*
    Echec de la creation de la socket
      */
      exit(1);
    }  

  /*Initiation de la memoire de la structure*/
  memset((char *) &sin, 0, sizeof sin);
  sin.sin_family = AF_INET;
  sin.sin_port  = htons(PORT);

    if(0 == inet_aton(IP,&(sin.sin_addr)))
      {
    printf("[-] inet_aton() FAILED\n");
    /*
      Echec de la convertion de l'IP
    */
    exit(1);
      }
  if(-1 == (connect(client_socket,(struct sockaddr *) &sin,sizeof sin)))
    {
      printf("[-] Connect() Failed (Maybe server is not running..)\n");
      /*
    Echec de la connexion !
      */
      exit(1);
    }

  printf("[+] CONNECTED !\n");
  /*On est connecté !*/
  printf("[*] SENDING : %s \n",tosend);

  if( -1 == write(client_socket,tosend,strlen(tosend)))
    {
      printf("[-] FAILED TO SEND : %s\n",tosend);
      exit(1);
    }
  printf("[+] %s WAS SENT\n",tosend);

  shutdown(client_socket,2);
  close(client_socket);
  
}

output ./server :
Code :
[13:37 sakiir@sakiir socket] > ./server
[*] SOCKET CREATING ..
[*] MEMORY INITIALIZING..
[*] IP CONVERTING..
[*] NAME GIVING..
[*] LISTENNING..
[+] CONNECTED !
[+] READING MESSAGE
[+] MESSAGE RECEIVED : message���|� // ICI :')
output ./client "message" :
Code :
[13:32 sakiir@sakiir socket] > ./client "message"
[+] CONNECTED !
[*] SENDING : message
[+] message WAS SENT



RE: [C] Socket Client-Serveur -> Write() + Read() - sakiir - 15-03-2013

j'ai resolu tout seul le probleme , j'ai tout simplement mal utilisé la fonctione read()
Code :
while(ret = read(client_socket,buf,1023))
    {
      buf[ret] = 0;
      printf("[+] MESSAGE RECEIVED : %s\n",buf);

    }
voila Smile


RE: [C] Socket Client-Serveur -> Write() + Read() - Creepy_p0ney - 15-03-2013

voilà :p tu peux essayer avec send/recv aussi et puis tu peux essayer de créer un serveur multiclient, comme ça c'est plus rigolo comme on dit "plus on est de fous plus on rit"


RE: [C] Socket Client-Serveur -> Write() + Read() - InstinctHack - 15-03-2013

Si tu sait pas coment tourner ça, regarde sur le forum, j'ai un serveur multi-client en python. Faut simplement transcoder :')


RE: [C] Socket Client-Serveur -> Write() + Read() - supersnail - 15-03-2013

Ben pour le multiclients soit tu bourrines à coup de threads, soit tu utilises select (et là ça devient funky sous win32 :') )


RE: [C] Socket Client-Serveur -> Write() + Read() - sakiir - 16-03-2013

supersnail : j'adore , le nombre de fois que j'ai vu win32 et funky se retrouver dans la meme phrase avec toi x)


RE: [C] Socket Client-Serveur -> Write() + Read() - EpicOut - 17-03-2013

faut vraiment s'appeler Conan le barbare pour le faire à coup de thread.


RE: [C] Socket Client-Serveur -> Write() + Read() - sakiir - 18-03-2013

(17-03-2013, 23h02)EpicOut a écrit : faut vraiment s'appeler Conan le barbare pour le faire à coup de thread.

euuuh ouai grave x)