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

Bibliothèques Discussion :

envoie de fichier avec winsock2


Sujet :

Bibliothèques

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut envoie de fichier avec winsock2
    boujour,d'abord.
    voila m'on probleme,des que j'ouvre un fichier(une image ,video,...)en binaire avec ifstream et que j'envoie la chaine de caractere avec send()de winsock(c'est en boucle tant qu'il y a des données a lire)et de l'autre coté je l'ai recois avec recv() et ben il m'indique une erreur 10 049 quand j'utilise la fonction blind().je sais pas quoi faire des que j'essaie d'envoyer des choses en boucle j'ai se probleme de socket.
    si vous savez comment envoyer un fichier(image,..)avec winsock veuillez m'en faire part je suis au bord de la crise de nerf et voudrez eviter de d'exploser mon pc pour un probleme comme celui-ci.
    je vous en remerci d'avance.

  2. #2
    Membre averti Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Points : 383
    Points
    383
    Par défaut Re: envoie de fichier avec winsock2
    Citation Envoyé par chichou10
    ben il m'indique une erreur 10 049 quand j'utilise la fonction blind().
    Hum hum....
    Peux tu être plus explicite ?
    Pour commencer, donne le message d'erreur entier et donne au moins le morceau de code ou se produit l'erreur !

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    mainteant c'est au niveau de la connection ,il dit connection non accepté car dans le prog je test si sa marche ou pas si sa marche pas j'affiche cette erreur plus la derniere erreur de wsa avec la fontion WSAGetLastError()et cette derniere erreur est 10014,en plus le probleme je fais aucune connection a ce server;
    bon assez parler je vais vous donner le code ce sera plus explicite je pense :

    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    #include<string>
    #include <winsock2.h>
    #include<iostream>
    #include<fstream>
     
    using namespace std;
    void fichier();
     
     
    int  main()
    {
       WSADATA              wsaData;
       SOCKET               ListeningSocket;
       SOCKET               NewConnection;
       SOCKADDR_IN          ServerAddr;
      SOCKADDR_IN          ClientAddr;
       int                  ClientAddrLen;
       int                  Port = 8080;
       int                  Ret;
     
     
     
       if ((Ret = WSAStartup(MAKEWORD(2,2), &wsaData)) != 0)
       {
     
          cout<<"WSAStartup échoué avec erreur"<< Ret<<endl;
          system("pause");
          return 1;
       }
     
     
     
       if ((ListeningSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) 
           == INVALID_SOCKET)
       {
         cout<<"socket échoué avec erreur"<< WSAGetLastError()<<endl;
          WSACleanup();
          system("pause");
          return 1;
       } 
     
     
     
       ServerAddr.sin_family = AF_INET;
       ServerAddr.sin_port = htons(Port);    
       ServerAddr.sin_addr.s_addr =INADDR_ANY;
     
     
       if (bind(ListeningSocket, (SOCKADDR *)&ServerAddr, sizeof(ServerAddr)) 
           == SOCKET_ERROR)
       {
          cout<<"bind échoué avec erreur"<< WSAGetLastError()<<endl;
          closesocket(ListeningSocket);
          WSACleanup();
          system("pause");
          return 1;
       }
     
     
     
       if (listen(ListeningSocket, 0) == SOCKET_ERROR)
       {
          cout<<"<ecoute> du port échoué avec erreur "<<WSAGetLastError()<<endl;
          closesocket(ListeningSocket);
          WSACleanup();
          system("pause");
          return 1;
       } 
     
      cout<<"nous allons attendre une connection a notre serveur chichou au port"<< Port<<endl;
     
     
       if ((NewConnection = accept(ListeningSocket, (SOCKADDR *) &ClientAddr,
                                   &ClientAddrLen)) == INVALID_SOCKET)
       {
          cout<<"connexion non accepter avec erreur"<< WSAGetLastError()<<endl;
          closesocket(ListeningSocket);
          WSACleanup();
          system("pause");
          return 1;
       }
     
     
      cout<<"nous avons etablie une connexion avec succes de "<<"ip : "<<
              inet_ntoa(ClientAddr.sin_addr)<<" au port : "<<ntohs(ClientAddr.sin_port)<<endl;
     
     
     
       closesocket(ListeningSocket);
       char j[100];
        char l[80];
        cin>>l;
        ofstream img2;
        img2.open("test");
        ifstream img;
        img.open(l);
     
      while(img.read((char*)&j,sizeof(j)))
        {
     
              if ((Ret = send(NewConnection,(char*)j,sizeof(j) , 0)) == SOCKET_ERROR)
       {
          cout<<"envoi de message echoue :  "<< WSAGetLastError()<<endl;
          closesocket(NewConnection);
          WSACleanup();
          return 1;
       }
     
     
              }
     
        img2.close();
        img.close();     
     
     
     
     
     
       cout<<"nous allons coupé la connection avec le client"<<endl;
     
     
      closesocket(NewConnection);
    WSACleanup();
       system("pause");
       return 0;
    }

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Utilise FormatMessage() pour avoir un message d'erreur qui expliquera mieux que la valeur...

    Toujours est-il:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/windows_sockets_error_codes_2.asp

    10014 = WSAEFAULT : Typiquement un pointeur invalide.
    10049 = WSAEADDRNOTAVAIL : Impossible d'assigner l'adresse demandée, généralement avec un bind() sur une "adresse réseau" invalide.

    (même si là, j'ai du mal à voir pourquoi ça échouerait).

    Toujours est-il que (erreurs sans gravité sous Windows et avec ces valeurs particulières):
    1° La fonction socket() doit recevoir PF_INET et non AF_INET (bien que sous Windows ce soit la même chose, et mal documenté de surcroit)
    2° Les constantes adresses (comme INADDR_ANY) ne sont pas supposées être passées directement : Utilise htonl(INADDR_ANY) (même si avec cette valeur particulière, ça marche, car c'est une valeur palindrome)


    Edit: Tu n'aurais pas dû supprimer l'ancien code. À présent que je ne vois plus ce qui se passait avant, je suis réduit à te poser la question: Tu avais bien mis un listen() avant ?
    Et tu initialises bien ClientAddrLen ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Points : 383
    Points
    383
    Par défaut
    Vu que tu utilises winsock qui est une API windows, va faire un tour sur la msdn pour savoir exactement le message d'erreur qui te permet de mieux comprendre que 10049 ou 10014 !!

    http://msdn1.microsoft.com/fr-fr/default.aspx

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    voila j'ai de nouveau mis ce qui précédait médinoc j'espere que tu y voierais plus claire maintenant,je l'ai enlevé carle code prenais de la place mais si sa vous derange pas je le met de nouveau entier
    pas de soucis.

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    ClientAddrLen n'est pas initialisé avant utilisation: C'est un paramètre in/out : En entrée, il doit être initialisé à sizeof(ClientAddr).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    oh la boulette ,je l'avaie oublier celui la ClientAddrLen j'ai du l'effacer quand j'ai voulue envoyer des fichier au lieu de message car il fonctionnait avant et moi qui cherchaie une erreur au niveau des fonctions winsock qui ratissaie internet de reponse a mes quetions,merci medinoc tu est mon sauveur et je suis confus d'une erreur si bete
    merci a vous pour vos reponse

  9. #9
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Plutôt que d'écrire (char*)&j ou (char*)j écris tout simplement j.
    Boost ftw

Discussions similaires

  1. problème d'envoi de fichiers avec php
    Par legentil dans le forum Windows
    Réponses: 6
    Dernier message: 16/11/2007, 11h11
  2. [Http_Client] Envoie de fichier avec setFileUpload
    Par toma79 dans le forum Autres composants
    Réponses: 6
    Dernier message: 01/06/2007, 05h45
  3. Réponses: 7
    Dernier message: 27/04/2006, 16h51
  4. [VB]Envoie de fichier avec winsock
    Par Xdrei dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 24/03/2006, 09h54
  5. Envoi de fichier avec Indy
    Par Nicodemus dans le forum Web & réseau
    Réponses: 2
    Dernier message: 28/10/2005, 15h29

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