Salut tout le monde
ça fait plus de 5 ans que je programme en C malgrès ça je me rends compte qu' il y a encore les suptilités du C qui m'échappent
j'ai 2 programmes un serveur et un client qui communiquent à l'aide de sockets ssl, le serveur attend les données provenant du client et les affiche. la premiere version du client marche bien mais la seconde ne marche pas, la seul différence ce que j'ai remplace les lignes suivantes :
par celle-ciCode:
1
2
3 if (!fgets(buf, sizeof(buf), stdin)) break;
est-ce que c'est du à sizeof() ?Code:
1
2 sprintf(buf,"message %d envoyé",i);
pour plus d'info voici les fonction en cause.
voici la fonction du serveur (pas de problème elle ne fais que affiche ce qu'elle reçoit) :
et voici la version (client) de la fonction qui marcheCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 int do_server_loop(SSL *ssl) { int err, nread; char buf[80]; do { for (nread = 0; nread < sizeof(buf); nread += err) { err = SSL_read(ssl, buf + nread, sizeof(buf) - nread); if (err <= 0) break; } fprintf(stdout, "%s", buf); } while (err > 0); return (SSL_get_shutdown(ssl) & SSL_RECEIVED_SHUTDOWN) ? 1 : 0; }
et voici la version de la fonction qui ne marche pasCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 int do_client_loop(SSL *ssl) { int i, err, nwritten; char buf[80]; for(i = 1; i <= 10;i++) { if (!fgets(buf, sizeof(buf), stdin)) break; for (nwritten = 0; nwritten < sizeof(buf); nwritten += err) { err = SSL_write(ssl, buf + nwritten, sizeof(buf) - nwritten); if (err <= 0) return 0; } } return 1; }
quelqu'un comprend pourquoi dans la première version de do_client_loopCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 int do_client_loop(SSL *ssl) { int i, err, nwritten; char buf[80]; for(i = 1; i <= 10;i++) { sprintf(buf,"message %d envoyé",i); for (nwritten = 0; nwritten < sizeof(buf); nwritten += err) { err = SSL_write(ssl, buf + nwritten, sizeof(buf) - nwritten); if (err <= 0) return 0; } } return 1; }
le serveur affiche 10 fois ce qui est tapé alors que dans la seconde version le
serveur n'affiche rien ?
Merci