Bonjour,

Je dois faire en sorte que mon programme puisse écrire dans un fichier et que ce fichier se fasse ensuite parcourir. Le contenu sera alors envoyé à un serveur via TCP/IP.
L'écriture se fait correctement, j'ai pu le vérifier en constatant que mon fichier texte contenait les bonnes données.
Cependant, il m'est impossible de pouvoir lire ce fichier afin d'envoyer ligne par ligne les données au serveur grâce à une boucle getline.

Voici les codes correspondant aux parties renconcrant le problème:

(Thread pour la reception des données et leur inscription dans le fichier)

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
66
67
68
69
70
71
72
73
74
75
76
77
78
DWORD BluetoothThread::ClientThread(SOCKET soc, SOCKADDR *pAdd)
{
    WSAQUERYSET     service;
    CSADDR_INFO     csAddr;
    int             ilen, nbAdd, compteur;
    SOCKADDR_BTH    sab2;
    SOCKET          NewConnection;
 
    ofstream fichier("test.txt", ios::out | ios::trunc);        // ECRASE
    //ofstream fichier("test.txt", ios::out | ios::app);        // AJOUTE
 
    cout << endl << "!--      Thread client demarre       --!" << endl;
 
    memset(&service, 0, sizeof(service));
    service.dwSize = sizeof(service);
 
    GUID serviceID = SAMPLE_UUID ;
    service.lpServiceClassId = (LPGUID) &serviceID ;
    service.dwNumberOfCsAddrs = 0 ;
 
    service.dwNameSpace = NS_BTH ;
 
    memset(&csAddr, 0, sizeof(csAddr));
    csAddr.LocalAddr.iSockaddrLength = sizeof(SOCKADDR_BTH);
    csAddr.LocalAddr.lpSockaddr = pAdd;
    csAddr.iSocketType = SOCK_STREAM;
    csAddr.iProtocol = BTHPROTO_RFCOMM;
    service.lpcsaBuffer = &csAddr;
 
 
    running = true;
    ilen = sizeof(sab2);
 
    while(running)
    {
        if( (NewConnection = accept( soc, (struct sockaddr*)&sab2, &ilen)) == INVALID_SOCKET )
        {
            Affiche_Erreurs( WSAGetLastError() );
            return 1;
        }
        else
        {
            wprintf (L"\nConnection entrante de : %04x%08x par le channel : %d\n", GET_NAP(sab2.btAddr), GET_SAP(sab2.btAddr), sab2.port);
            memset(buffer, 0, sizeof(buffer));
 
            recv(NewConnection,(char*)buffer,1, 0);
 
            nbAdd=(int)buffer[0];
            cout << "Nombre de boucles : " << (int)buffer[0] << endl << endl;
 
            for(compteur=0; compteur<nbAdd; compteur++)
            {
                nombre_co++;
                recv(NewConnection,(char*)buffer, sizeof(buffer), 0);
                fichier << buffer << " : " << QDateTime::currentDateTime().toString().toStdString().c_str() << endl ;
                cout << "- Retour " << compteur+1 << ": " << buffer << endl;
            }
 
            mess_retrn = buffer;
            string str_crypt;
            cryp->vigenere_crypter(mess_retrn,str_crypt,cle);
            mess_retrn = str_crypt;
 
            closesocket(NewConnection);
        }
    }
 
    if (WSASetService(&service, RNRSERVICE_DELETE, 0) == SOCKET_ERROR)
        Affiche_Erreurs( WSAGetLastError() );
 
    shutdown(soc,2);
    closesocket( soc );
    fichier.close();
 
    ExitThread(0);
 
    return 0;
}
(Thread pour la lecture du fichier et l'envoie au serveur)

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
DWORD CServeurTcp::ClientThread(SOCKET soc)
{
    ifstream fichier("test.txt", ios::in);
    string ligne, mess_crypt, donnees;
 
    if(fichier)
    {
 
        while(running)
        {
            cout << "RUNNING" << endl;
                while(getline(fichier, ligne))
                {
                    cryp->vigenere_crypter(ligne,mess_crypt,"VIGE");
                    donnees = salle + " - " + mess_crypt;
                    emis = send(soc, donnees.c_str(), strlen(donnees.c_str()), 0);
                    if(emis == SOCKET_ERROR)
                        Affiche_Erreurs( WSAGetLastError() );
                    else
                        cout << "Nombre de caracteres envoyes: " << strlen(buffer) << endl;
                }
 
            Sleep(1000);
        }
        fichier.close();
    }
    else
        cout << endl << "Impossible d'ouvrir le fichier !" << endl;
 
 
    ExitThread(0);
 
    return 0;
}

Merci de votre aide, en vous souhaitant une bonne journée !