Bonsoir tout le monde, voila que je m'interesse depuis pas longtemps aux sockets, mais je suis incapable de debugger un ptit chat très basique que je suis en train de faire. Ça me tourmente depuis plusieurs jours déjà.
Le problème étant:
1. Le serveur seulement reçoit le premier message envoyé par le client.
2. Le client n'arrive à envoyer que 2 messages, après il plante ( sans erreurs ni seg fault...)
Peut-être quelqu'un pourrait me dire ou se trouve l'erreur ou les erreurs ?
Merci beaucoup, ci-dessous je cole le code:
PS: Oui je suis espagnol
______________________________________________
programilla-commons.h
____________________
programilla-cliente.c
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 #ifndef __PROGRAMILLA_COMMONS__ #define __PROGRAMILLA_COMMONS__ #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #define ERROR(numerror,errno) { printf("Error: %s // %s \n", errores[numerror-1], strerror (errno)); } #define SERVER_IP "127.0.0.1" #define SERVER_PORT 6969 #define MAX 255 #define LOG "mitxt" #endif char errores[10][45] = {"1, Apertura del fichero", "2, Escritura del fichero", "3, Cerradura del fichero", "4, Lectura del mensaje en el socket", "5, Escritura del mensaje en el socket", "6, Apertura del socket del server", "7, Publicidad del socket del server", "8, Acceptar la conexion del cliente", "9, Apertura del socket del cliente", "10, Peticion de conexion del cliente"};
_______________
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 #include "programilla-commons.h" escribir_mensaje (int* socket_fd, char* mensaje) { int errno; int nbytes; if ((nbytes = send (*socket_fd, mensaje, MAX, 0)) == -1) ERROR(5,errno); printf("Bytes escritos: %d , Mensaje = %s", nbytes, mensaje); } int main() { int errno; bool fin = false; FILE *txt; int socket_fd; char *mensaje = (char *) malloc (255); struct sockaddr_in server_addr; if ((socket_fd = socket (AF_INET, SOCK_STREAM, 0)) == -1) ERROR(9,errno); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr (SERVER_IP); server_addr.sin_port = htons (SERVER_PORT); if (connect (socket_fd, (struct sockaddr *) &server_addr, sizeof (server_addr)) == -1) ERROR(10,errno); if ((txt = fopen (LOG, "w")) == NULL) ERROR(1,errno); printf ("Introduce una linea (END para acabar)\n"); fflush (stdout); do { fflush (stdout); fgets (mensaje, MAX, stdin); if ((strcmp (mensaje, "END\n")) == 0) { fin = true; break; } if (fprintf (txt, mensaje) < 0) { ERROR(2,errno); } escribir_mensaje (&socket_fd, mensaje); } while (fin != true); if ((fclose (txt)) != 0) ERROR(3,errno); free (mensaje); close (socket_fd); return 0; }
programilla-server.c
_______________
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 #include "programilla-commons.h" leer_mensaje (int new_socket_fd, char* mensaje) { int errno; int nbytes; if (( nbytes = recv (new_socket_fd, mensaje, MAX, 0)) == -1) ERROR(4,errno); printf(mensaje, nbytes); } int main() { int errno; int pid; int socket_fd, new_socket_fd; char *mensaje = (char *) malloc (255); struct sockaddr_in server_addr, client_addr; int client_addr_length; if ((socket_fd = socket (AF_INET, SOCK_STREAM, 0)) == -1) ERROR(6,errno); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr (SERVER_IP); server_addr.sin_port = htons (SERVER_PORT); if ((bind (socket_fd, (struct sockaddr *) &server_addr, sizeof (server_addr))) == -1) ERROR(7,errno); listen (socket_fd, 5); for (;;) { client_addr_length = sizeof (client_addr); if ((new_socket_fd = accept (socket_fd, (struct sockaddr *) &client_addr, &client_addr_length)) == -1) ERROR(8,errno); if ((pid = fork ()) == -1) { ERROR(15,errno) } else if (pid == 0) { close (socket_fd); leer_mensaje (new_socket_fd, mensaje); close (new_socket_fd); exit (0); } close (new_socket_fd); } return 0; }
Partager