OVH Cloud OVH Cloud

Ouverture de session Internet

29 réponses
Avatar
neirda
Bonjour

Je suis en train de r=E9aliser un client FTP pour mon BTS.

Je souhaiterai ouvrir une session FTP et permettre l'envoi et la
r=E9ception de fichiers.

J'ai donc t=E9l=E9charg=E9 de la doc et m=EAme un exemple de l'utilisation
de wininet sur le site de msdn.

Mais cela reste difficil =E0 comprendre.

C'est pr=E9cisement sur cette page que j'ai trouv=E9 l'exemple:

http://support.microsoft.com/default.aspx?scid=3Dkb;en-us;175179

Qui pourrait m'aider =E0 comprendre le code?

Ce que j'ai compris pour l'instant c'est qu'il faille d'abord ouvrir
une connection internet (avec internetOpen ) mais est ce indispensable?

Ensuite il faut se connecter au serveur. Mais moi ca ne fonctionne pas
dans mon code.

10 réponses

1 2 3
Avatar
Jean-Marc
"Gloops" a écrit dans le message de
news:437f8db2$0$18304$
Jacques93 a écrit, le 19/11/2005 20:00 :

> Mais pour ne pas te desesperer, sache que à partir du moment ou l'on à
> compris le principe de fonctionnement du protocole FTP, les autres
> protocole de la même génération : SMTP (courrier sortant), IMAP
> (courrier entrant), POP3 (courrier entrant), NNTP (news, c'est à dire
> ici, entre autres), etc... te sembleront beaucoup plus simple :-)

Salut,

Dans ce cas, d'un point de vue pédagogique, il y a quelque chose qui
m'étonne : on commence par le plus compliqué alors ? Dans le but
d'élaguer un maximum de monde peut-être ?

Certes les profs ne sont pas là pour répondre j'imagine ...

C'est quoi comme BTS ? Il y en a plusieurs dans l'informatique il me


semble.

Hello,

j'imagine que neirda répondra directement, mais moi je parierais
pour un BTS Informatique Industrielle.

Une implémentation d'un client FTP me semble un excellent exercice
pour bien faire comprendre les sockets, un protocole sur 2 canaux,
lire une RFC, comprendre le principe de connexion persistante et non
persistante.
C'est aussi un bon exercice pour faire coder qq chose de pas trop
trivial, pour être intéressant et de pas trop compliqué, pour ne pas
être décourageant. En plus, c'est ludique :-))

Implémenter un client pop3 ou smtp est quand même vraiment très simple,
en tout cas trop simple amha pour que se soit un exercice valable pour
un BTS II. Ca peut être traité en cours, bien sur.


--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
neirda
BTS informatique de gestion, option développement.

Bon, il me semble que je saisi bien le fonctionnement du protocol FTP.

Je peux donc passer au code, et là c'est un autre problème. J'essaye
d'utiliser l'API windows de la librairi Wininet mais rien n'y fait.

Voici à quoi ressemble mon code:

Private Sub cmd_Click()
Dim hOpen As Long
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT,
vbNullString, vbNullString, 0)

Dim hConnection As Long
hConnection = InternetConnect(hOpen, "ftpperso.free.fr",
INTERNET_DEFAULT_FTP_PORT, "borouth01", _
"epiphone", 2, 0, 0)
End Sub
Avatar
neirda
Bon ya du nouveau:

J'arrive à me connecter (je vois ça grâce au Firewall).
Avatar
Jean-Marc
Tu devrais aller lire tes mails (j'espère que ton
adresse email (hotmail) est valide).

--
Jean-marc
Avatar
Gloops
Ah, d'acc.
Comme moi, mais il faut dire que pour moi le projet d'examen (en 90)
était en Cobol ( :) ) alors les appels aux API, je les ai découverts en
clientèle, grâce un peu aux bouquins et beaucoup aux pistes conseillées
sur newsgroups ...
ça va vous faire ça de moins à ramer sur le terrain, après.
_____________________________________
neirda a écrit, le 19/11/2005 21:52 :

BTS informatique de gestion, option développement.


Avatar
neirda
Moi c'est mon tuteur (je suis en stage depuis deux semaines) qui m'a
expliqué le fonctionnement des API.
Il y a encore une semaine je ne savais pas ce que s'était!

Je me demandes seulement si pour la présentation d'une PTI lors du
BTS, l'utilisation d'une API est bien vue?

Cela facilite la programmation en tirant parti de fonction déjà
crée, mais si je l'explique bien, j'espère que ça passera. Et au
pire, si je sens le jury déçu, je leur code rapidement l'envoi d'un
fichier sans passer par l'API, ce que j'ai fait avant qu'on me parle de
wininet...

Bref, j'ai lu le résumé de Wiki que jacques m'a passé, demain je
lirais la RFC correspondante, et si j'ai encore des soucis sur le code
[ce qui a 95 % de chance d'arrivé... :-) ] je viens vous voir!

/* Encore merci Jean-Marc pour le mail! */

A+ All
Avatar
Gloops
neirda a écrit, le 19/11/2005 23:14 :

Je me demandes seulement si pour la présentation d'une PTI lors du
BTS, l'utilisation d'une API est bien vue?



ça, je ne sais pas.

Comme élément de réflexion : Microsoft n'assure (presque) plus le
support de VB6, et propose VB.Net à la place, or .Net inclut beaucoup
plus d'instructions, permettant de se passer des appels aux API.

Ainsi donc, on enseigne encore VB en BTS aujourd'hui ?
Bon OK, je vois qu'on a le temps de migrer tranquillement :)
Avatar
Jean-Marc
"Gloops" a écrit dans le message de
news:437fa8e5$0$18348$
neirda a écrit, le 19/11/2005 23:14 :

> Je me demandes seulement si pour la présentation d'une PTI lors du
> BTS, l'utilisation d'une API est bien vue?

ça, je ne sais pas.



Je pense que l'important c'est de montrer qu'on a saisi la
problématique dans son ensemble, qu'on a compris le protocole,
qu'on a su aller chercher les informations (lire la RFC). Ensuite,
présenter les alternatives possibles pour le codage: expliquer que
le langage choisi pour l'implémentation permet de réaliser une
implémentation utilisant différentes méthodes, de la plus "hard" à la
plus "soft": API sockets, Ocx Winsock, Wininet, etc.
Puis expliquer pourquoi on a choisi l'une ou l'autre méthode et
enfin, expliquer son implémentation.

Comme élément de réflexion : Microsoft n'assure (presque) plus le
support de VB6, et propose VB.Net à la place, or .Net inclut beaucoup
plus d'instructions, permettant de se passer des appels aux API.



Connaitre les API est toujours utile, car leur utilisation n'est pas
limitée à un langage.

Ainsi donc, on enseigne encore VB en BTS aujourd'hui ?
Bon OK, je vois qu'on a le temps de migrer tranquillement :)



Ca c'est sur. D'autre part, je pense qu'il faut voir plus loin que cela:
Quand on embauche un programmeur junior, il faut de toute façon consacrer
de 3 à 6 mois pour lui apprendre la programmation industrielle, qui n'a
RIEN à voir avec la programmation hobbyiste ou scolaire. Alors, que le
jeune ait appris VB, C, Java, C++, Delphi ou autre (à l'école ou tout seul),
peu importe finalement: si il est bon, il passera d'un langage à l'autre
en qq semaines. L'important n'est pas qu'il connaisse "bien" un langage,
l'important est qu'il connaisse suffisamment bien l'algorithmique et
qu'il assimile les méthodes de programmations selon les normes de
l'industrie,
en terme de qualité, de robustesse, de documentation, etc. Une bonne
capacité à lire et à comprendre de grosses quantités de documentation est
clairement un gros plus, bien plus grand pour un recruteur que de soit
disant
"très bonne connaissance du langage X, Y ou Z", qu'on voit (trop?) souvent
sur les CVs des juniors ...

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Alfred Wallace
"neirda" a écrit dans le message de news:

slt, je me doutes bien qu'il faille une connection internet mais par
exemple avec l'adsl on est toujours connécté. Alors pourquoi
internetOpen alors? si on est déjà connecté?


Bonjour,

Tu es toujours connecté à l'ADSL et aux serveurs de noms(DNS) de ton FAI pas
au serveur hébergeant le ftp de Free. Il faut donc bien se connecter sur ce
serveur. Attention aux faux amis dans le langage internet (connecter veut
souvent dire communiquer).

La première partie de déclaration consiste à enregistrer ton programme
auprès des fonctions wininet.

par exemple je mis ca, lorsque je clique sur le bouton connection ca
execute ce code:

Dim hConnection As Long, hOpen As Long, sOrgPath As String
hOpen = InternetOpen("Client FTP", INTERNET_OPEN_TYPE_DIRECT,
vbNullString, vbNullString, 0)
hConnection = InternetConnect(hOpen, "ftpperso.free.fr", 0,
"borouth01", "epiphone", INTERNET_SERVICE_FTP, 0, 0)


ET dans un module j'ai déclaré ceci:

Public Declare Function InternetConnect Lib "wininet.dll" Alias
"InternetConnectA" (ByVal hInternetSession As Long, ByVal sServerName
As String, ByVal nServerPort As Integer, ByVal sUserName As String,
ByVal sPassword As String, ByVal lService As Long, ByVal lFlags As
Long, ByVal lContext As Long) As Long
Public Declare Function InternetOpen Lib "wininet.dll" Alias
"InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long,
ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags
As Long) As Long

Ce que tu indiques ci-dessus est bon et ta connection à ftpperso.free.fr
doit être établie. Tu dois le vérifier en testant le contenu du handle
hconnection.
If hConnection <> 0 Then
bConnectionSiteApi = True
FTPEnCours = True
Label1 = "Connection établie avec le site demandé ! "
Else
Label1 "Connection impossible sur l'url demandée ! "
End If

Si elle est bonne, tu dois récupérer le dossier par défaut de ton ftp ("/")
ou en positionner un direct ou par incrémentation
ftpGetCurrentDirectory et ftpSetCurrentDirectory
Lorsque tu es dans le dossier souhaité, tu dois itérer la liste des fichiers
et dossiers par FtpFindFirstFile: Tu récupères alors un structure
WIN32_FIND_DATA et tu appelles ensuite InternetFindNextFile pour itérer avec
cette même structure.

Les deux dernières fonctions utiles sont ftpPutFile pour déposer un fichier
ou ftpGetFile pour le télécharger.
Ne pas oublier de refermer les handles de connection en fin de traitement.
lRetVal = InternetCloseHandle(hConnection)
Sleep (200)
If lRetVal = 0 Then
Call ShowErr
End If
hConnection = 0

lRetVal = InternetCloseHandle(hOpen)
Sleep (300)
If lRetVal = 0 Then
Call ShowErr
End If
hOpen = 0

Si tu veux faire le costaud, wininet.dll permet également le monitoring des
transactions avec l'api InternetSetStatusCallback. Elle permet de tester
tout ce qui se déroule et éventuellement d'afficher une barre de progression
pour les longs téléchargements.

Bon Fun
Luc
Avatar
neirda
Me revoila !!

En ce qui concerne la connection au serveur c'est OK.

hconnection est bien différent de 0.

Ce que je ne comprend pas, c'est comment lister le contenu du serveur
dans un DirListBox ou autre...

Lorsque j'utilise un ftpgetcurrentdirectory j'obtient logiquement "/"
mais après? comment afficher ce que contient ce repertoire?
1 2 3