Lire fichier .ini serveur-client

Nemesis-fr Messages postés 74 Statut Membre -  
Nabla's Messages postés 20731 Statut Contributeur -
Bonjour,
Je voudrais avoir des conseils et de l'aide je vous prit sur un tp.
Notre tp simple consiste à faire un serveur - client , sa je l'ai fais mais le vrais soucis c'est que l'adresse ip et le port doit être fait à partir d'un dossier , pour que l'ip et le port ne soit pas rentrée en 'dur' .

Jusque la j'ai réussi , mais il y'a une 'difficulté' que nos professeurs nous on mit , c'est à dire que le fichier .ini doit ressembler a sa dedans :

ip:192.168.0.1
host:4444

Et il faut que je récupère les deux valeurs , dans n'importe quel sens qu'il soit , que ce soit l'ip en première ou deuxième.

Pour résumé je ne sais pas faire le bout de programme qui me permetterait de lire les lettres et qu'il dise : sa c'est l'ip , puis qu'il mettre les numéros après le ':' dans une variable que je réutiliserais par la suite.

Pouvais vous m'aider ? J'espère que j'ai étais assez clair ^^

Amicalement Jonathan.

A voir également:

7 réponses

Nabla's Messages postés 20731 Statut Contributeur 3 194
 
quel langage de programmation ?

tu préparres 2 variables : ip et port.
tu lis le fichier. Dans tous le slangages, t'as des fonctions de comparaison de chaine (memcmp, strccmp en C, instr en VB ... ). Tu regardes avec ca si le début de la ligne lue est ip: ou port:

ensuites, tu prends la fin de la ligne que tu stoques dans ta variable (en transtypant pour le port si besoin) ...
0
Nemesis-fr Messages postés 74 Statut Membre 1
 
Bonsoir:
Je code en c++ , et j'ai essayé toutes les méthodes mais je n'y arrive toujours pas , je suis en train de me cassé la tête dessus lol , je ne sais pas trop par ou et quoi utilisé pour commencer tout sa.

Je voudrais lire , si ce que j'ai lus alors je mets ce qu'il y'a après les ':' dans la variable ip si j'ai lu ip , ou port si j'ai lu port.

Quelqu'un pourrait t'il me donner un algo ou un bout de code pour m'aidé je vous prit :s.

Amicalement Jonathan.
0
Nemesis-fr Messages postés 74 Statut Membre 1
 
Voila je mets mon code ici pour vous montrer mon code , et je bloque à la partie ou il y'a 'do' que je n'ai pas terminé car je ne sais pas du tout comment le faire , j'ai tout essayé mais je n'y arrive pas :(.

//Ici j'ouvre mon fichier .ini et je l'annonce.
			cout<<"Fichier ouvert"<<endl<<endl ;

			do
			{
				caractereActuel[cpt] = fgetc(Ini_client) ;
				cpt ++ ;
			}while(caractereActuel != ":") ;
            /*fichier >> ip >> port ;  *///on lit jusqu'à l'espace et on stocke ce qui est lu dans la variable indiquée.
            fichier.close();//Je ferme le fichier et je l'annonce.
			cout<<"Fichier fermer"<<endl<<endl ;
        }
        else
                cout << "Impossible d'ouvrir le fichier !" << endl ;

		// CECI A ETAIT MON ESSAI AU DEBUT --->   //char ip[256] = "192.168.0.129" ;

		WSAStartup(MAKEWORD(2,0), &WSA_fichier) ;

		sin.sin_addr.s_addr = inet_addr(ip) ; // Appartient à la struct SOCKADDR_IN et permet de se connecter au serveur avec l'adresse ip.
		sin.sin_family      = AF_INET ;
		sin.sin_port        = htons(port) ; //Le numéros de port que l'on veut se connecter.
		sock = socket(AF_INET,SOCK_STREAM,0) ;//Création du socket.
		bind(sock, (SOCKADDR *)&sin, sizeof(sin)) ;

		connect(sock, (SOCKADDR *)&sin, sizeof(sin)) ;

		char buffer[BUFSIZ] ;
		char msg[256] ;

		while(1) 
		{
			cout << "MSG : " ;
			cin >> msg ;

			memset(buffer, '\0', sizeof(buffer)) ;
			sprintf(buffer, "%s\n", msg) ;
		    send(sock, buffer, sizeof(buffer), 0) ;

			memset(buffer, '\0', sizeof(buffer)) ;
			recv(sock, buffer, sizeof(buffer), 0) ;
		    cout<<""<<buffer<<endl ;
0
Nabla's Messages postés 20731 Statut Contributeur 3 194
 
code non testé, pour le principe ....

char buff[128];
char* valeur;

//on lit la ligne
fgets (buff, 128, Ini_client);

//si la ligne commence par IP
if (memcmp(buff,"ip",2) == 0)
{
    //on fait pointer valeur sur une partie de la ligne... c'est pas beau, et dès que t'as ta valeur, je te conseilles de la copier dans uen vrai variable.... tu pourrais ausi faire un strcpy(variable_ip,buff + 3) ca devrait marcher.... peut etre prévoir du transtypage

    valeur = buff +3;
    printf("la valeur de l'ip est %s", valeur);
}

//tu fais pareil avec le port, tu devras surement faire un sscanf pour rapatrier ca dans un entier ....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nemesis-fr Messages postés 74 Statut Membre 1
 
En fait je ne comprends pas trop ce que vous voulez faire ( c'est vraiment gentil d'avoir proposé sa en tout cas je vous en remercie franchement !!! ) mais j'ai besoin d'une méthode pour lire jusqu'au ':' et comparer si avant c'était marqué ip ou port , et après attribuer ce qu'il y'a à coté des : dans une variable approprié.

Amicalement Jonathan !
0
Nabla's Messages postés 20731 Statut Contributeur 3 194
 
ben, je lis la ligne, je regarde si la ligne démarre par "ip" (c'est vrai qu'il faudrai comparrer avec "ip:". Ensuite, le valeur = buff+3 ca veut dire que la string valeur sera la meme que buff, mais en partant du 3° caractère (peut etre qu'il aurai fallu mettre 4 parce que sinon on prend le ":"). Attention, la memoire est partagée entre les 2 string ....

t'as essayé le code ? t'essayes, tu fais qq modifs, et t'essaye de comprendre....
0
Nemesis-fr Messages postés 74 Statut Membre 1
 
Bonjour ,

Voila j'ai plus ou moins modifié votre code et j'azi pu faire marcher comme je voulais mon programme ! Je vous en remercie beaucoup !

Tenez pour ceux que sa peut aider je vais faire voir la partie de mon code qui permet de lire dans un fichier et faire le trie , je vais essayer de commenter en plus pour vous faire comprendre comment il marche ,

En tout cas Nabla's merci beaucoup de votre qui ma était vraiment très utile , je vous communiquerai ma note dès que je l'aurais ^^

Amicalement Jonathan !

[Je vous mets le code dès possible car je ne l'ai pas sur ma clef usb]
0
Nabla's Messages postés 20731 Statut Contributeur 3 194
 
tu peux meme aussi mettre la version modifiée du code, ca peut servir ...
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Bonjour tou(te)s
Je programme pas en C mais je connaît bien les fichier INI.
1°) on ouvre pas un fichier INI, ont le designe, par exemple (en VB)
Dim NomIni as string
NomINI = "C:\Repertoir\LeNomDuFichier.ini"
2°) ensuite ont emploi les API pour écrire et lire dans le fichier
Déclaration des appels API
'==================== dans les fonctions INI ====================== 
Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long 
Public Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long 
Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long


Un fichier INI est formatter en Rubrique et chaque rubrique contient ses clés.
Ont peu donc écrire une donnée en spécifiant la rubrique et la clé, par exemple.. où Txt est la valeur à mémoriser
Dim ret% 
    ret% = WritePrivateProfileString("Adresse", "ip:", Txt, NomINI)
    ret% = WritePrivateProfileString("Adresse", "host:", Txt, NomINI)

Et de même, pour extraire la donnée...
Dim RetVal As String, ret%, IP as string 
    RetVal= Space$(150) 
    ret% = GetPrivateProfileString(("Adresse", "ip:", RetVal, 150, NomINI) 
    IP= Left$(RetVal, ret%)

Désolé de ne pas pouvoir te le traduire en C.
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
0
Nabla's Messages postés 20731 Statut Contributeur 3 194
 
Je pense que son but était justement de se passer de l'API ;)
0