Bonjour,

je souhaiterais réaliser un programme qui envoie des commandes (unix ex: ls) à mon serveur, mon serveur exécute la commande envoyé par mon client et le résultat au client.

voici le code coté serveur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
void client_read(t_env *e, int fd)
{
  int   r;
  char  buf[4096];
  int   a = 0;
  char  **av;
  pid_t pid;
 
  av = malloc(2*sizeof(char*));
  av[0] = malloc(12);
  av[1] = NULL;
  r = read(fd, buf, 4096);
  if (r > 0)
    {
      buf[r - 1] = '\0';
      strcpy(av[0],buf);
      printf("%s\n", buf);
    }
  else
    {
      printf("%d: Connection closed\n");
      close(fd);
      e->fd_type[fd] = FD_FREE;
    }
  pid = fork();
  if (pid != 0)
    {
    }
  else
    {
      if (strcmp(buf, "ls") == 0)
        execv("/bin/ls", av);
      if (strcmp(buf, "cp") == 0)
        execv("/bin/cp", av);
      exit(1);
    }
}
et voici le code client :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
int             get_socket(char *ip, char *port)
{
  char          buff[400];
  int           i = 0;
  int           sock;
  struct protoent *pe;
  struct sockaddr_in    sin;
  int           error;
 
  buff[400] = '\0';
  pe = getprotobyname("TCP");
  sock = socket(AF_INET, SOCK_STREAM, pe->p_proto);
  if (sock == -1)
    return (-1);
  sin.sin_family = AF_INET;
  sin.sin_port = htons(atoi(port));
  sin.sin_addr.s_addr = inet_addr(ip);
  error = connect(sock, (const struct sockaddr *)&sin, sizeof(sin));
  if (error == -1)
    {
      close(sock);
      return (-1);
    }
 
  write(sock, "Connected\n", 10);
  int a = 0;
  while (1)
    {
      a = read(0, buff, 400);
      buff[a] = '\0';
      write(sock, buff, strlen(buff));
    }
}
 
int             main(int ac, char **av)
{
  int           sock;
 
  sock = get_socket(av[2], av[1]);
  if (sock == -1)
    return (-1);
}
Cordialement.