3 votes

le serveur à ports multiples ne reçoit pas toutes les transmissions

J'ai écrit un serveur à un seul thread en c sous linux, ce serveur est à l'écoute de plusieurs ports, le serveur est supposé recevoir des messages textes, J'utilise ce code pour écouter les sockets :

while(1){
FD_ZERO(&socks);
for (i = 0 ; i < IndexConnctedSocket ; i++ )
    FD_SET(newSocketFds[i],&socks);

readsocks = select(highNewSocket + 1,&socks,(fd_set*) 0,
        (fd_set*) 0 ,&timeout);

    for (j = 0 ; j <= index ; j++ ){
        if ( FD_ISSET(newSocketFds[j],&socks) != 0 ){
            bzero(buffer, 2048);
            n = read(newSocketFds[j], buffer, 2048);
            if (n < 0)
                error("ERROR reading from socket");
            i = 0;

            n = write(newSocketFds[j], "I got your message  ",18);
            if (n < 0)
                error("ERROR writing to socket");
            }
}

mais lorsque j'envoie des messages au serveur (via un client qui se connecte à toutes les sockets), certains messages sont perdus, et lorsque je me connecte au serveur à partir de différents clients, cela fonctionne parfaitement.

0voto

wildplasser Points 17900

TCP n'a pas de messages, donc plusieurs "messages" peuvent être obtenus en un seul read(). Essayez de vérifier le résultat (n) de votre appel read(). Vous pouvez vérifier le tampon avec

printf("read(%d): %*.*s\n", n, n, n , buffer);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X