Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1561 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  ouvrir et lire un fichier sur serveur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

ouvrir et lire un fichier sur serveur

n°1605659
coco441
Posté le 29-08-2007 à 11:07:33  profilanswer
 

Salut,
 
Comment écrire un code client en C++ pour ouvrir et lire un fichier texte situé sur un serveur distant (sans rapatrier ce fichier)?
Quels sont les protocoles généralement utilisés et quelles sont les méthodes appropriées ?
 
Si quelqu'un avait un exemple simple pour me montrer comment faire en sorte que le fopen (de ifstream) du code client comprenne qu'il faut ouvrir un fichier sur serveur...
 
Merci,
 
Un vrai débutant

mood
Publicité
Posté le 29-08-2007 à 11:07:33  profilanswer
 

n°1605665
Elmoricq
Modérateur
Posté le 29-08-2007 à 11:13:19  profilanswer
 

Tu passes par un montage NFS [:arcueid brunestud]

n°1605672
coco441
Posté le 29-08-2007 à 11:16:01  profilanswer
 

Elmoricq a écrit :

Tu passes par un montage NFS [:arcueid brunestud]


 
Cela permet de n'avoir qu'une lettre pour identifier le serveur, c'est cela ?
Si oui, je suis ok, cela marche.
 
Mais précisément je cherche la solution sans montage...
 
Merci quand même
;-)

n°1605721
Taz
bisounours-codeur
Posté le 29-08-2007 à 12:17:04  profilanswer
 

ftp

n°1605742
coco441
Posté le 29-08-2007 à 13:00:58  profilanswer
 

ftp ?  
C'est un peu court...Pour que je puisse comprendre...
Quelqu'un sait-il comment faire un code client en C++ pour OUVRIR (puis lire) un fichier texte distant ?
En utilisant ftp comme protocole pourquoi pas...??
 
Merci

n°1605746
ElDesdicha​do
Posté le 29-08-2007 à 13:16:09  profilanswer
 
n°1605889
Elmoricq
Modérateur
Posté le 29-08-2007 à 15:46:46  profilanswer
 

coco441 a écrit :

ftp ?
C'est un peu court...Pour que je puisse comprendre...
Quelqu'un sait-il comment faire un code client en C++ pour OUVRIR (puis lire) un fichier texte distant ?
En utilisant ftp comme protocole pourquoi pas...??

 

Merci

 

Tu ne peux pas ouvrir directement un fichier sur un serveur distant, sauf si le système de fichiers est monté en local d'une manière ou d'une autre (par exemple à l'aide d'un montage NFS).
La seule solution vraiment viable est de récupérer le fichier et de le traiter en local. D'où la réponse de Taz : ftp.

 

Quant à savoir ce que c'est : Google [:ofou]


Message édité par Elmoricq le 29-08-2007 à 15:47:55
n°1605898
Gf4x3443
Killing perfection
Posté le 29-08-2007 à 15:57:44  profilanswer
 

NFS ou CIFS amha

 

Je vois pas non plus pourquoi il y aurait un problème avec ftp, à part rapatrier le fichier pour le lire (à la différence des deux premiers cités).

 

En revanche, si c'est pour coder un client from scratch, vaudrait mieux jouer avec des sockets et du ftp (et utiliser fdopen à la place de fopen) que de se lancer à fond les manettes dans les RPC, ca pourrait être long et douloureux :o

 

Edit: ah oui et probablement autre possibilité: webdav.

Message cité 1 fois
Message édité par Gf4x3443 le 29-08-2007 à 15:59:34
n°1606064
coco441
Posté le 30-08-2007 à 07:07:39  profilanswer
 

Gf4x3443 a écrit :

NFS ou CIFS amha
 
Je vois pas non plus pourquoi il y aurait un problème avec ftp, à part rapatrier le fichier pour le lire (à la différence des deux premiers cités).
 
En revanche, si c'est pour coder un client from scratch, vaudrait mieux jouer avec des sockets et du ftp (et utiliser fdopen à la place de fopen) que de se lancer à fond les manettes dans les RPC, ca pourrait être long et douloureux :o
 
Edit: ah oui et probablement autre possibilité: webdav.


 
Précisément,
 
Je pense qu'il me faut utiliser des sockets (après avoir lu plusieurs choses sur le net...). Je ne savais par contre pas comment ouvrir le fichier distant...Je regarde la piste fdopen...Merci.
 
PS : dommage que je n'ai pu trouver un exemple (court) disponible sur le net...

n°1606065
Gf4x3443
Killing perfection
Posté le 30-08-2007 à 07:19:54  profilanswer
 

Un example sur le net? Sérieux c'est la base des socket, cherche mieux.

 

Fait à l'arrache, un truc dans le genre (minus les erreurs de syntaxe hein, pas taper :/ )

 

Socket TCP:

 
Code :
  1. int ret, fds;
  2.         FILE * stream;
  3.         struct addrinfo * res;
  4.         struct addrinfo hints;
  5.         memset(&hints, 0, sizeof(hints));
  6.         hints.ai_flags    = AI_PASSIVE;
  7.         hints.ai_family = AF_INET;
  8.         hints.ai_socktype = SOCK_STREAM;
  9.         hints.ai_protocol = IPPROTO_TCP;
  10.        /* Get connect info for host/port */
  11.         ret = getaddrinfo(host, port, &hints, &res);
  12.         if (ret != 0)
  13.                 errx(EX_DATAERR, "blabla" );
  14.         if ((fds = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) == -1)
  15.                 err(EX_OSERR, "blabla2" );
  16.         int optval = 1;
  17.         if (setsockopt(fds, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)))
  18.                 err(EX_OSERR, "blabla3" );
  19.         if (bind(fds, res->ai_addr, res->ai_addrlen) != 0)
  20.                err(EX_OSERR, "blabla4" );
  21.         freeaddrinfo(res);
  22.         if (listen(fds, 10) != 0)
  23.                 err(EX_OSERR, "blabla5" );
  24.         if ( fcntl(fds, F_SETFL, O_NONBLOCK) == -1 )
  25.                 err(EX_OSERR, "blabla6" );
  26.         stream = fdopen(fds, "rw" );
  27.         if (stream == NULL)
  28.                 err(EX_OSERR, "blabla7" );
  29.         /* fread/fwrite/fseek ... */


Message édité par Gf4x3443 le 30-08-2007 à 07:23:46
mood
Publicité
Posté le 30-08-2007 à 07:19:54  profilanswer
 

n°1606075
coco441
Posté le 30-08-2007 à 08:22:50  profilanswer
 

Merci mais j'avais effectivement déjà pu lire ce type de code, sauf que je ne comprends toujours pas comment on passe l'info concernant le nom du fichier à ouvrir (puis lire)...
Dans l'exmple, on construit la socket fds pour communiquer avec le serveur et on comprend qu'il y a ouverture d'un fichier grâce à fdopen...Mais quel fichier ?? fds pointe bien sur l'IP du serveur (getadrrinfo) mais où dit-on au client d'aller lire le fichier \users\toto.txt sur ce serveur ??
 
J'aurai envie d'écrire un truc du style stream=fopen("\users\toto.txt", "r" )...mais stream est déjà associé à la socket...
 
???

n°1606084
Gf4x3443
Killing perfection
Posté le 30-08-2007 à 08:58:06  profilanswer
 

Houla, je pense qu'on va (re)commencer par le commencement alors.
 
socket: http://www.laissus.fr/cours/node18.html
 
Tout ce qui est protocole (NFS, FTP, HTTP) sont plus haut niveau que TCP, lui même basé sur IP. Le socket ne concerne que TCP/IP, c'est à toi de faire le protocole pour ouvrir ton fichier distant. Soit tu le fais toi même (client + serveur à coder), soit tu te greffes par dessus un protcole existant, et il ne te reste plus que le client à modifier légèrement pour faire ce que tu veux.
 
Par exemple, pour ftp, tu ouvres le socket, tu récupères le fichier (get...) tu le mappes en mémoire (mmap) tu travailles dessus, et tu le renvoies au serveur (put).
 
Oui, y'a du code à taper...
 
Personnellement, j'obterais pour des partages réseau genre NFS/CIFS, ils ferront aussi bien, et tu travailles sur le fichier directement au travers du partage monté.
 
Question de choix.

n°1606106
coco441
Posté le 30-08-2007 à 09:50:45  profilanswer
 

Sans faire de code côté serveur et sans montage type NFS, il faut récupérer(get...) le fichier avant de travailler dessus...Il est rapatrié côté client ?

n°1606111
Elmoricq
Modérateur
Posté le 30-08-2007 à 09:52:55  profilanswer
 

Oui. Encore une fois, tu ne peux pas ouvrir un fichier directement s'il se trouve sur un serveur distant, sauf s'il est monté d'une manière ou d'une autre de manière locale.
Si tu ne passes pas par un NFS quelconque, tu dois rapatrier le fichier.

n°1606115
coco441
Posté le 30-08-2007 à 09:56:40  profilanswer
 

Sans faire de code côté serveur et sans montage type NFS,il faut donc avoir de l'espace disque disponible côté client...C'est nul !!

n°1606119
Elmoricq
Modérateur
Posté le 30-08-2007 à 10:00:32  profilanswer
 

Attends. Imagine maintenant le cas inverse : tu peux ouvrir tous les fichiers que tu veux directement sur le serveur que tu veux. Et pose-toi ensuite la question suivante : est-ce que ça te plairait de savoir, lorsque tu te connectes sur internet, que tout le monde potentiellement peut accéder à tes fichiers directement et les lire ou les modifier ?

 

edit : hmm, j'ai sans doute répondu à côté de la plaque [:elmoricq]


Message édité par Elmoricq le 30-08-2007 à 10:03:23
n°1606121
Gf4x3443
Killing perfection
Posté le 30-08-2007 à 10:01:59  profilanswer
 

coco441 a écrit :

Sans faire de code côté serveur et sans montage type NFS,il faut donc avoir de l'espace disque disponible côté client...C'est nul !!

 

Si tu avais lu ce que j'ai marqué au dessus, rien ne t'empeche de mapper une zone pour écrire dedans. Au lieu d'espace disque, c'est en ram que tu travailles.

 

man mmap.

 
Elmoricq a écrit :

Attends. Imagine maintenant le cas inverse : tu peux ouvrir tous les fichiers que tu veux directement sur le serveur que tu veux. Et pose-toi ensuite la question suivante : est-ce que ça te plairait de savoir, lorsque tu te connectes sur internet, que tout le monde potentiellement peut accéder à tes fichiers directement et les lire ou les modifier ?

 

Y'a pas que ca en plus: au niveau local, le noyau peut gérer les accès concurrentiels avec des verrous, qu'on peut mettre dans le code avec la libpthread ou des semaphores.

 

Par réseau, ca va être galère à gérer [:ddr555]


Message édité par Gf4x3443 le 30-08-2007 à 10:03:35
n°1606139
Taz
bisounours-codeur
Posté le 30-08-2007 à 10:24:43  profilanswer
 

HTTP aussi, dav, toussa.
 
On y peut quoi : l'informatique c'est pas magique.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  ouvrir et lire un fichier sur serveur

 

Sujets relatifs
Formulaire : envoyer des données dans le même fichiersqlplus: pb format colonne dans un fichier texte issu d'une requête
[SQL Server] Retrouver le login / mot de passe du serveurSupression Sous-Répertoire(s) et Fichier(s)
[résolu] PHP : lire une page web et séparation paramètres[VBA] Via Macro Excel, Ouvrir & Editer fichier CSV [RÉSOLU]
selectionner un fichier qui a 15 joursavec une macro Excel, ouvrir un fichier sous un autre logiciel
C++ comment ouvrir et lire un fichier sur serveur distant ? 
Plus de sujets relatifs à : ouvrir et lire un fichier sur serveur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR