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 :

Connexion impossible [425 can't open data connection socket c]


Sujet :

Réseau C

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    528
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 528
    Points : 217
    Points
    217
    Par défaut Connexion impossible [425 can't open data connection socket c]
    Bonjour,

    J'ecris en ce moment un petit client ftp pour un usage perso.
    Tout se passe bien jusqu'au moment du RETR ...
    Après le PASV je récupère bien l'ip que m'envoie le serveur avec le port et A priori le Socket est bien créé, le Bind et le Listen posent pas de pb, mais la commande accept, bien qu'elle réponde sans erreur est elle correcte ?
    Est ce que je fais bien les choses ???
    Il doit y avoir une raison, mais j'ai fouillé un peu partout, sans rien trouver de très concret...

    Si un amateur de Socket, de ftp en C pouvait m'éclairer ...

    Merci d'avance

    Voici le code en question
    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
    //
                  iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
    //
                  host = gethostbyname(hostname);
    			  if (host == NULL) {
                    sprintf_s(wbuf, sizeof(wbuf), "La resolution a échouée : %d\n", WSAGetLastError());
                    MessageBox(hwnd, wbuf, "Client HelpDesk", MB_OK|MB_ICONINFORMATION);
                    return 0;
    			  }
    //
                  ListenSocket = socket(AF_INET, SOCK_STREAM, 0);
                  memset((char *)&service,'0',sizeof(service));
    //              service.sin_addr.s_addr = inet_addr("192.168.10.2");
                  service.sin_addr.s_addr = *(u_long *) host->h_addr_list[0];
                  service.sin_family = AF_INET;
                  service.sin_port = htons(DEFAULT_PORT);
    //
    			  if (iResult=connect(ListenSocket, (SOCKADDR *)&service, sizeof(service)) == S_OK) {
                    recv(ListenSocket, buffer_io, sizeof(buffer_io), 0);
                    MessageBox(hwnd, buffer_io, "Reponse connect", MB_OK|MB_ICONINFORMATION);
    //
                    strcpy_s(wbufP, sizeof(wbufP), "USER xxxxxxx\r\n");
                    send(ListenSocket, wbufP, strlen(wbufP), 0);
     
                    memset (buffer_io, '\x00', sizeof(buffer_io));
                    recv(ListenSocket, buffer_io, sizeof(buffer_io), 0);
                    MessageBox(hwnd, buffer_io, "Reponse USER", MB_OK|MB_ICONINFORMATION);
    //
                    strcpy_s(wbufP, sizeof(wbufP), "PASS xxxxxxxxxxx\r\n");
                    send(ListenSocket, wbufP, strlen(wbufP), 0);
    //
                    memset (buffer_io, '\x00', sizeof(buffer_io));
                    recv(ListenSocket, buffer_io, sizeof(buffer_io), 0);
                    MessageBox(hwnd, buffer_io, "Reponse PASS", MB_OK|MB_ICONINFORMATION);
    //
    //
                    strcpy_s(wbufP, sizeof(wbufP), "PASV\r\n");
                    send(ListenSocket, wbufP, strlen(wbufP), 0);
    //
                    memset (buffer_io, '\x00', sizeof(buffer_io));
                    recv(ListenSocket, buffer_io, sizeof(buffer_io), 0);
                    MessageBox(hwnd, buffer_io, "Reponse PASV", MB_OK|MB_ICONINFORMATION);  //227
    //
                    portdata=RecupPort(hwnd, buffer_io);
                    _itoa_s (portdata, wbuf, sizeof(wbuf), 10);
    				        MessageBox(hwnd, wbuf, "Port PASV", MB_OK|MB_ICONINFORMATION);
    //
    //
                  memset(&localaddr,0,sizeof(localaddr));
                  memset(&remoteaddr,0,sizeof(remoteaddr));
    //
                  s = socket(AF_INET, SOCK_STREAM, 0);
                  localaddr.sin_family = AF_INET;
                  localaddr.sin_addr.s_addr = htonl(INADDR_ANY);
                  for( i = min_port; i <= max_port; i++){
    		            localaddr.sin_port = htons(i);
                    if(0 <= bind(s,(struct sockaddr *)(&localaddr),sizeof(struct sockaddr)))
                      break;
                  }
    //
                  strcpy_s(wbufP, sizeof(wbufP), "RETR exemple.txt\r\n");
                  send(ListenSocket, wbufP, strlen(wbufP), 0);
    //
                  listen(s,5);
                  remoteaddr.sin_family = AF_INET;
    			        remoteaddr.sin_port = htons(portdata);
                  remoteaddr.sin_addr.s_addr = inet_addr("192.168.10.3");
                  len = sizeof(remoteaddr);
                  nc = accept(s,(struct sockaddr *)(&remoteaddr), &len);
    			        if (nc <0 ) {
    				        sprintf_s(wbuf, sizeof(wbuf), "accept failed! %d \n", WSAGetLastError());
    				        MessageBox(hwnd, wbuf, "FTP Client", MB_OK|MB_ICONINFORMATION);
    				        exit(0);
    			        }
                  sprintf_s(recvbuf, sizeof(recvbuf), "accepted a connection from IP %s port %d \n",inet_ntoa(remoteaddr.sin_addr),ntohs(remoteaddr.sin_port));
                  MessageBox(hwnd, recvbuf, "FTP Client", MB_OK|MB_ICONINFORMATION);
    //PORT
    //
    				      while(1) {
                     i=recv(nc, recvbuf, sizeof(recvbuf), 0);
    				        if (i<0) break;
                      MessageBox(hwnd, recvbuf, "Reponse data de RETR", MB_OK|MB_ICONINFORMATION);
    				      }
                  closesocket(nc);
    //
                    memset (buffer_io, '\x00', sizeof(buffer_io));
                    recv(ListenSocket, buffer_io, sizeof(buffer_io), 0);
                    MessageBox(hwnd, buffer_io, "Reponse RETR", MB_OK|MB_ICONINFORMATION); 
    //
     
     
                                                                                            //226 Transfer complete.
    //Fermeture socket data
    //
    			  }
    			  else {
                    sprintf_s(wbuf, sizeof(wbuf), "La connexion au serveur a échouée : %d\n", WSAGetLastError());
                    MessageBox(hwnd, wbuf, "Client HelpDesk", MB_OK|MB_ICONINFORMATION);
                    closesocket(ListenSocket);
                    WSACleanup();
                    ListenSocket = INVALID_SOCKET;  //Uniquement pour l'affichage WM_PAINT
                    status_c=0;
    			    InvalidateRect (hwnd, &rect, TRUE);
    			  }
    La log du serveur (Gene6Ftp)
    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/05/04 18:11:53, 703, 192.168.10.2, , new connection from 192.168.10.2 on 192.168.10.3:21 (Explicit SSL)
    15/05/04 18:11:53, 703, 192.168.10.2, , hostname resolved : PC1
    15/05/04 18:11:53, 703, 192.168.10.2, , sending welcome message.
    15/05/04 18:11:53, 703, 192.168.10.2, , 220 Gene6 FTP Server v3.10.0 (Build 2) ready...
    15/05/04 18:11:56, 703, 192.168.10.2, , USER utilisateur
    15/05/04 18:11:56, 703, 192.168.10.2, utilisateur, 331 Password required for utilisateur.
    15/05/04 18:11:57, 703, 192.168.10.2, utilisateur, PASS ****
    15/05/04 18:11:57, 703, 192.168.10.2, utilisateur, logged in as "utilisateur".
    15/05/04 18:11:57, 703, 192.168.10.2, utilisateur, 230 User utilisateur logged in.
    15/05/04 18:11:59, 703, 192.168.10.2, utilisateur, PASV
    15/05/04 18:11:59, 703, 192.168.10.2, utilisateur, 227 Entering Passive Mode (192,168,10,3,156,75)
    15/05/04 18:12:03, 703, 192.168.10.2, utilisateur, RETR exemple.txt
    15/05/04 18:12:03, 703, 192.168.10.2, utilisateur, asked to download '/exemple.txt' -> 'E:\mainserver\www\exemple.txt' from 0 --> Access allowed.
    15/05/04 18:12:33, 703, 192.168.10.2, utilisateur, 425 Cannot open data connection.

  2. #2
    Membre chevronné
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 856
    Points : 2 179
    Points
    2 179
    Par défaut
    Si j'ai bonne mémoire, lors du téléchargement d'un fichier, le serveur te demande généralement de te connecter à un deuxième port ou bien d'en ouvrir pour qu'il puisse lui-même s'y connecter. Es-tu sûr que ce soit bien à toi d'ouvrir ce port ?

    D'ailleurs, si bind réussit, il renvoie 0. Ta condition me paraît un peu trop compliqué à mon goût. Il est possible que accept échoue si ta box internet ne permet pas le binding de ce port, dans ce cas il te faudra l'ouvrir et le rediriger sur ton pc.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    528
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 528
    Points : 217
    Points
    217
    Par défaut
    Citation Envoyé par imperio Voir le message
    Es-tu sûr que ce soit bien à toi d'ouvrir ce port ?
    Bonjour,

    effectivement, c'est le serveur qui attend une connexion, le client doit se connecter a l'adresse et au port donné par le PASV précédent !
    L'autre mode etant par la commande PORT.
    J'étais parti dans une mauvaise direction ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                   strcpy_s(wbufP, sizeof(wbufP), "RETR ascreen.jpg\r\n");
                    send(ListenSocket, wbufP, strlen(wbufP), 0);
                    memset (buffer_io, '\x00', sizeof(buffer_io));
    //
                    if (iResult=connect(s, (SOCKADDR *)&localaddr, sizeof(localaddr)) == S_OK) {
                      recv(ListenSocket, buffer_io, sizeof(buffer_io), 0);  //réponse du RETR
                      .....
                     while(condition) {
                       nb1 = recv(s, recvbuf, sizeof(recvbuf), 0 );     //Réception data
                       .....
                     }
                    .......
    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WS 2008] 425 could not open data connection to port
    Par oufaraj dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 24/05/2013, 08h48
  2. [Net::FTP] can't open data connection
    Par dazz_x dans le forum Modules
    Réponses: 2
    Dernier message: 23/10/2006, 08h44
  3. [C++][Connexion] Impossible de se connecter à ma base
    Par Firestarter dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 19/01/2006, 22h45
  4. Réponses: 20
    Dernier message: 13/01/2006, 20h42
  5. [Connexion] impossible de se connecter autrement qu'en local
    Par sekiryou dans le forum Installation
    Réponses: 4
    Dernier message: 29/03/2004, 16h19

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