Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Programmation...............


Speedy

Messages recommandés

Salut à tous....

 

Je programme un expéditeur FTP (stage oblige).

 

Je connecte mon client sur un port de mon ordi local et j'envoi ou je reçois mes données.

 

Ceci étant, il m'est impossible de réutiliser 2 fois le même port pour envoyer ou recevoir(faut attendre un moment avant).

 

Y a t'il quelque chose de spécial à faire.

 

icon_confused.gificon_confused.gificon_confused.gificon_confused.gificon_confused.gif

 

Merci..........

Lien vers le commentaire
Partager sur d’autres sites

Si tu veux garder une certaine compatibilité j'imagine que tu n'utilises pas les classes CSocket ou CAsyncSocket qui font parti des MFCs et qui sont donc 100% MicroMou.

 

 

 

J'imagine donc que tu utilises les fonctions definies dans "winsock2.h"

 

 

 

Pour fermer ton socket il faut juste utiliser la fonction : int closesocket(SOCKET);

 

 

 

Par contre, la description de ton probleme est trés floue. J'espere que tu ne spécifies pas le port par lequel le client se connecte au serveur car ce n'est pas l'utilisation normale. Normalement du coté du client, on laisse le systeme te donner un port libre et effectivement c'est a lui de le liberer quand il veut et ca peut prendre un peu de temps.

 

Mais si tu ne specifies pas le port par lequel le client se connecte, le systeme te fournit toujours un port utilisable.

 

 

 

J'espere que je suis clair dans mon explication icon_frown.gif. Quand je parle de port par lequel le client se connecte, je ne parles pas du port sur lequel le serveur t'attend (le 21 habituellement).

 

 

 

Seiju

 

[ Ce Message a été édité par: Seiju le 2001-04-30 09:22 ]

Lien vers le commentaire
Partager sur d’autres sites

J'utilise bien winsock2.h

 

 

 

En effet, c moi qui choisi le port et je le passe au serveur FTP par la commande 'PORT'.

 

Quelle fonction me permet d'obtenir un numéro de port libre sur le client???

 

Merci

 

 

 

[ Ce Message a été édité par: speedy le 2001-04-30 09:37 ]

Lien vers le commentaire
Partager sur d’autres sites

Heuu on est pas au meme niveau, je te parles Socket et tu me parles FTP icon_smile.gif

 

Ca n'a rien a voir avec le protocole FTP mais avec la gestion des sockets ton probleme.

 

 

 

A moins que tu n'utilises une lib de fonctions faites par kkun d'autres et que tu ne touches pas toi-même aux sockets. Dans ce cas, il faut voir avec la personne qui a developpé cette lib.

 

 

 

Pour le port libre sur le client, tu n'as rien a faire justement. C'est si tu veux spécifier un port qu'il faut appeler une fonction. Tu te contentes d'appeler la fonction "connect".

 

 

 

En fait tu dois avoir un truc ressemblant a ca :

 

 

 



-----------------------------------------


#include <winsock2.h>





int main(int argc, char* argv[])


{


SOCKET sockClient;


struct sockaddr_in addrServ;


int errCode;


unsigned int addr;


struct hostent *hp;


WORD wVersionRequested;


WSADATA wsaData;


int err;





// Init Winsock


wVersionRequested = MAKEWORD( WS_VER_HIGH, WS_VER_LOW );





err = WSAStartup( wVersionRequested, &wsaData );


if ( err != 0 ) {


 /* Tell the user that we could not find a usable */


 /* WinSock DLL.                                  */


 sys_err("Version de Winsock invaliden");


}





/* Confirm that the WinSock DLL supports 2.2.*/


/* Note that if the DLL supports versions greater    */


/* than 2.2 in addition to 2.2, it will still return */


/* 2.2 in wVersion since that is the version we      */


/* requested.                                        */


if ( LOBYTE( wsaData.wVersion ) != WS_VER_LOW ||


     HIBYTE( wsaData.wVersion ) != WS_VER_HIGH ) {


 /* Tell the user that we could not find a usable */


 /* WinSock DLL.                                  */


 WSACleanup( );


 sys_err("Version de Winsock invaliden");


}





// Créer socket


sockClient = socket(AF_INET, SOCK_STREAM, 0);


if (sockClient == INVALID_SOCKET) {


 sys_err("Erreur création socketn");


}





// Position l'adresse et le port du server


addr = inet_addr("127.0.0.1");


hp = gethostbyaddr((char *)&addr,4,AF_INET);


if (hp == NULL) {


 sys_err("Erreur dans l'adresse du servern");


}





// Connect socket


memset(&addrServ, 0, sizeof(addrServ));


addrServ.sin_family = AF_INET;


addrServ.sin_port = htons(SERV_PORT);


memcpy(&(addrServ.sin_addr),hp->h_addr,hp->h_length);


if (connect(sockClient, (struct sockaddr *)&addrServ, sizeof(addrServ)) != 0) 


{


 errCode = WSAGetLastError();


 WSACleanup();


 sys_err("Connect error : %dn", errCode);


}





// .......


// ....... Traitement a effectuer pendant la connexion


// .......





// Ferme tout


closesocket(sockClient);





return 0;


}


---------------------------------------


 

 

 

Seiju

 

 

 

[ Ce Message a été édité par: Seiju le 2001-04-30 09:51 ]

Lien vers le commentaire
Partager sur d’autres sites

Non, je n'utilise rien de fait par qq'un d'autre.

 

Mais comme je doit créer un client serveur FTP, forcément, je doit utiliser des sockets pour communiquer.

 

Le problème est que c moi qui choisit le port sur lequel j'envoi (ou récupére) mes données et j'indique au FTP d'utiliser ce port.

 

En fait le pb est au niveau du socket d'écoute

Lien vers le commentaire
Partager sur d’autres sites

Je ne suis pas trés clai, c vrai (mea culpa)

 

 

 

Le vrai pb est que c moi qui spécifie un numéro de port au départ et si mon socket d'écoute n'est pas accépter, je modifie le numéro de port et je recommence.

 

 

 

Ceci étant, qu"nd j'utilise int closesocket(SOCKET), il semble que mon port ne soit pas libérer, à oins qu'il ne mette un certain temps.

 

C problème arrive en fait quand j'envoi plusieurs fichiers à la suite.

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous publiez en tant qu’invité. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...