IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

Envoyer un fichier sur un ordinateur


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut Envoyer un fichier sur un ordinateur
    Bonjour, j'aimerais pouvoir, en C, en console, envoyer un fichier vers un autre ordinateur. je dis bien le fichier, non le contenu du fichier !
    le mieux serait de gruger pour utiliser les socket.

    Idées pour m'aider ?

  2. #2
    Membre chevronné
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    Sous quel système?
    Que veux tu dire par :
    Citation Envoyé par lapras123
    . je dis bien le fichier, non le contenu du fichier !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut
    sous windows.
    je veux dre :
    je veux pas envoyer une variable contenant le contenu du fichier
    genre :
    char contenu[50]="contenu du fichier";
    kje veux envoyer la variable FILE *fichier !

  4. #4
    Membre chevronné
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    Citation Envoyé par lapras123
    kje veux envoyer la variable FILE *fichier !
    Elle ne sera pas utilisable sur une autre machine...
    Que veux tu faire exactement?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut
    Voici mon idée :
    Je stock dans un fichier repertoire.txt l'arborescence d'un répertoire entier avec ses sous repertorie ect..
    Ca peut devenir énorme
    la lecture de repertoire.txt est trop grande
    je veux donc mettre le fichier repertoire.txt qui es sur l'ordi de mon client sur mon ordi pour que je puise le visualiser avcec le bloc note, nottepadd++ ect...
    voila mon idée

  6. #6
    Membre chevronné
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    Tu veux l'envoyer via le réseau?
    Comment es tu connecté avec ton client?

  7. #7
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par lapras123
    sous windows.
    je veux dre :
    je veux pas envoyer une variable contenant le contenu du fichier
    genre :
    char contenu[50]="contenu du fichier";
    kje veux envoyer la variable FILE *fichier !
    La variable fichier initialisée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FILE *fichier = fopen("test", "r");
    ne représente pas le fichier mais est une structure pour lire correctement le fichier. Envoyer la valeur fichier vers un autre ordinateur n'a aucun sens vu que c'est un pointeur.

    Et envoyer le contenu n'a aucun sens puisque le fait d'avoir le contenu ne veut pas dire que tu as le fichier sur l'autre ordinateur. De plus, même si le fichier existait cela ne fonctionnerait pas.

    Jc

  8. #8
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    Citation Envoyé par lapras123
    Bonjour, j'aimerais pouvoir, en C, en console, envoyer un fichier vers un autre ordinateur. je dis bien le fichier, non le contenu du fichier !
    le mieux serait de gruger pour utiliser les socket.

    Idées pour m'aider ?
    Alors la je vois pas ce que tu veux dire. Tu veux envoyer l'objet et pas son contenu ???
    Cette question est un non sens à mon gout.
    Si tu copie un fichier entre fat32 et ntfs il ne sera pas référencé de la meme façon.

  9. #9
    Membre expérimenté Avatar de Pikwik
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 237
    Par défaut
    Arrête moi si je me trompe, mais tu souhaites en fait "copier" un fichier de la machine du client sur ta machine.

    Je ne suis pas un Pro en C mais cela ne me parait pas vraiment être un problème de C...

    Pour récuprérer un fichier d'une machine vers une autre, tu dois utiliser un protocole de transfert de fichiers, comme le FTP, le SFTP (par SSH2), ou encore dans un réseau local le NetBEUI (pour Windows).

    Au boulot quand on veut récupérer un fichier comme ca on utilise SFTP. Sous linux il suffit d'avoir un serveur SSH comme OpenSSH et sous windows on utilise Cygwin + OpenSSH.

    Il doit sans doute existe d'autre moyen, mais en C, hors mis utiliser un protocole de transfert de fichier, je ne vois pas comment tu pourrais faire.

  10. #10
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Pikwik
    Arrête moi si je me trompe, mais tu souhaites en fait "copier" un fichier de la machine du client sur ta machine.

    Je ne suis pas un Pro en C mais cela ne me parait pas vraiment être un problème de C...
    Effectivement mais ce problème peut être intégré dans le protocol du programme qu'il tente de programmer...

    Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Si le fichier n'est pas présent, 
       Récupérer/Accéder le/au fichier chez le client
    Il doit sans doute existe d'autre moyen, mais en C, hors mis utiliser un protocole de transfert de fichier, je ne vois pas comment tu pourrais faire.
    Des sockets et un envoi bête en méchant.

    En fait, si je regarde un peu les posts, j'ai l'impression que l'auteur original ne veut pas envoyer le fichier mais juste avoir accès au fichier à distance.

    La seule solution qui le permettrait serait de faire un protocol d'accès au fichier. Le serveur veut lire les 100 premiers octets du fichier, il envoie un message :

    FICHREQ 0 100
    Par exemple... Et lorsque le client reçoit ce message, il peut envoyer les 100 premiers octets du fichier au serveur...

    Deux choses à remarquer :

    A part si ton fichier est vraiment énorme et que le serveur ne va pas forcément avoir à lire tout le fichier, cette solution est envisageable. Mais elle demande plus de travail que juste :

    Le serveur n'a pas le fichier,
    Le serveur demande au client le fichier
    Le client envoie le fichier
    Mais ceci n'est pas une question de C pour l'instant puisqu'il faut d'abord décider de l'algorithme du programme, du protocol de transfert et ensuite codé le tout en C...

    Jc

  11. #11
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 487
    Par défaut
    tu peut definir un serveur comme tels:
    #include<stdio.h>
    #include<winsock2.h>
    #pragma comment(lib,"ws2_32.lib")

    int main(int argc, char *argv[])
    {
    int port;
    SOCKET sock;
    SOCKADDR_IN csin;
    WSADATA wsa;
    WSAStartup(MAKEWORD(2,0),&wsa);
    if(argc >= 2){
    port = atoi(argv[1]);
    printf("%d",port);
    }
    else {
    if("%s","\nPort : ");
    scanf("%i",&port);
    }
    csin.sin_family=AF_INET;
    csin.sin_addr.s_addr=htonl(INADDR_ANY);
    csin.sin_port=htons(port);

    sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

    bind(sock,(SOCKADDR*)&csin,sizeof(csin));

    listen(sock, 1);


    SOCKET val = INVALID_SOCKET;
    int len=sizeof(csin);
    while(val==INVALID_SOCKET)
    {
    val = accept(sock, (SOCKADDR *)&csin, &len);
    }

    printf("accept ok\n");

    char buffer[50];
    memset(buffer,0,sizeof(buffer));
    int err=0;
    err=recv(val,buffer,sizeof(buffer),0);
    FILE *fichier = fopen(buffer,"wb");
    printf("%s",buffer);
    while(err>-1)
    {
    err=recv(val,buffer,sizeof(buffer),0);
    if(buffer[0]!='\0'){
    //printf("%s\n",buffer);
    fwrite(buffer,sizeof(buffer),1,fichier);
    }
    else err=-2;
    memset(buffer,0,sizeof(buffer));
    }
    printf("Connection terminée\n\n");
    WSACleanup();
    system("PAUSE");
    return 0;
    }
    Les pièges de l'Internet
    Helix, réponse à une intrusion


    "La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
    "Si j'ai vu plus loin, c'est en me tenant sur les épaules de géants." Isaac Newton

  12. #12
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 487
    Par défaut
    ainsi que client:
    #include<stdio.h>
    #include<winsock2.h>
    #pragma comment(lib,"ws2_32.lib")

    int main(int argc, char *argv[])
    {
    char nomfichier[255];
    int port;
    char ip[15];
    SOCKET sock;
    SOCKADDR_IN sin;
    WSADATA wsa;
    WSAStartup(MAKEWORD(2,0),&wsa);

    if(argc >= 2){
    strcpy(ip,argv[1]);
    printf("%s\n",ip);
    }
    else {
    printf("Ip : ");
    scanf("%s",ip);
    }
    if(argc >= 3){
    port = atoi(argv[2]);
    printf("%d\n",port);
    }
    else {
    printf("port : ");
    scanf("%d",&port);
    }
    if(argc >= 4){
    strcpy(nomfichier,argv[3]);
    printf("%s\n",nomfichier);
    }
    else {
    printf("nom du fichier : ");
    scanf("%s",nomfichier);
    }
    FILE *fichier = fopen(nomfichier,"rb");
    sin.sin_family=AF_INET;
    sin.sin_addr.s_addr=inet_addr(ip);
    sin.sin_port=htons(port);

    sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

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

    if(connect(sock,(SOCKADDR*)&sin,sizeof(sin)))
    {
    printf("La connection a echoue\n");
    system("PAUSE");
    exit(0);
    }
    char buffer[50];
    memset(buffer,0,sizeof(buffer));
    int err=0;
    err=send(sock,nomfichier,sizeof(buffer),0);
    while(err>-1)
    {
    fread(buffer,sizeof(buffer),1,fichier);
    // scanf("%s",buffer);
    err=send(sock,buffer,sizeof(buffer),0);
    memset(buffer,0,sizeof(buffer));
    }
    printf("Connection terminée\n\n");
    WSACleanup();
    system("PAUSE");
    return 0;
    }
    Les pièges de l'Internet
    Helix, réponse à une intrusion


    "La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
    "Si j'ai vu plus loin, c'est en me tenant sur les épaules de géants." Isaac Newton

  13. #13
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par smoove
    tu peut definir un serveur comme tels:
    Er pour l'indentation, tu ne peux pas faire mieux ?

    Code::Blocks : Plugins / Code formatter

Discussions similaires

  1. Envoyer un fichier sur un serveur ftp
    Par Pascmar dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 16/08/2007, 00h16
  2. Envoyer un fichier sur un serveur au navigateur
    Par Shogun dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 20/09/2006, 09h39
  3. envoyer un fichier sur ftp
    Par alex01pernot dans le forum Web & réseau
    Réponses: 3
    Dernier message: 26/03/2006, 19h22
  4. Envoyer un fichier sur un serveur FTP par proxy
    Par Tierisa dans le forum Access
    Réponses: 4
    Dernier message: 13/12/2005, 17h39
  5. Quel langage pour envoyer un fichier sur une adresse
    Par dai.kaioh dans le forum Développement
    Réponses: 2
    Dernier message: 02/04/2004, 17h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo