Bonjour à tous.

je débute avec les socket en C++ et j'ai un problème dans la reception quand il y a beaucoup de données (en tous cas bcp plus que le buffer peut absorbé)

voila des extraits du code :

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
 
...
    char buf[PACKET_SIZE];
 
    string message[] = {
        "authinfo user XXXX@free.fr\n",
        "authinfo pass YYYY\n"
    } ;
 
    for (int i=0;i<sizeof(message)/sizeof *message;++i){
 
    buf[0] = 0x00 ;
    ReadBuff(GetSocketId(),buf,(PACKET_SIZE)) ;
 
        // WRITE SOCKET
        if (int j = (write(GetSocketId(),message[i].c_str(),message[i].length()))<0){        
            cerr << "Impossible d'ecrire dans le socket !" << endl;
        } else {            
            if (DEBUG)
                cout << "Envoi de la commande : code("<< j << ")  " << message[i] << endl;
        }
 
    }
 
int Nntp::ReadBuff(int socket_id,char *buffer, unsigned int length) {
 
	int nl, nr ;
	nl = length ;
 
	while (nl > 0){
		memset(buffer, 0x0, PACKET_SIZE) ;
		nr = read(socket_id,buffer,nl) ;
		if (nr < 0) return nr ;
		else if (nr == 0) {
			cout << buffer ;
			break ;
		} else {
			cout << buffer ;
		}
		nl -= nr ;
		buffer += nr ;
		if ( *(buffer-1)=='\n' && *(buffer-2) == '\r'){
			break ;
		}
		break ;
	}
	*buffer = 0x00; 
	return (0); 
 
}
quelqu'un connait il un moyen de pouvoir gerer les buffers des sockets quelque soit la taille des données à obtenir et le type (Binaire ou Texte).

j'ai trouvé beaucoup de tuto mais a chaque fois c'est juste pour envoyer 'Hello World' mais pas une grande masse de données.

si quelqu'un peut m'expliquer l'algorithme a utilisé pour pouvoir tout récupérer..

merci d'avance.