Serveur/client envoie exécution commande sur le client connecté a un serveur
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:
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:
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.