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 :
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 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); } }
Cordialement.
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); }
Partager