Transfert (simple!!) de fichiers entre deux winsocks

Vlavv Messages postés 20 Date d'inscription samedi 16 juillet 2005 Statut Membre Dernière intervention 3 septembre 2009 - 12 févr. 2006 à 12:20
Vlavv Messages postés 20 Date d'inscription samedi 16 juillet 2005 Statut Membre Dernière intervention 3 septembre 2009 - 17 févr. 2006 à 20:53
Bonjour
j'ai trouvé une méthode assez simple et très pratique pour télécharger n'importe quel fichier avec Inet (sur le site de Microsoft, me souviens plus trop du lien) :

' download FTP files
Dim b() As Byte
Dim strURL As String


' Set the strURL to a valid address.
strURL = "..."
' Retrieve the file as a byte array.
b() = Inet.OpenURL(strURL, icByteArray)


' ** create directory on your machine with directory target
Open "..." For Binary Access _
Write As #1
Put #1, , b()
Close #1

Ma question est simple : est-il possible d'adapter cette méthode pour transférer un fichier entre deux Winsocks ?

Merci
-Vlavv

4 réponses

cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 2
12 févr. 2006 à 16:27
c possible entre deux winsock, mais a modifier


<HR>

Life is short...Learn more
Copy Rights <> Rights to Copy
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 févr. 2006 à 17:06
Salut
Adapter cette méthode, non, car les objets sont bien différents.
Le transfert de fichier par Winsock (WS) est bien sûr faisaible (heureusement).
Avec les WSs, la différence majeure, c'est qu'il faut qu'il y ait un programme "server" qui tourne sur la machine source (avec WS) et un programme "client" côté demandeur (avec WS aussi).
Le WS client doit faire une demande de connexion au WS serveur.
Celui-ci accèpte la demande et la liaison est faite.
Ensuite, il suffit que le WS client fasse des demandes au WS serveur avec des mots clés que tu définis toi même, tu définis le langage d'échange.
Des exemples simples existent pour les Chat (vaste rayon sur vbfrance).
Pour le transfert de fichier, c'est un peu plus délicat car les caractères échangés peuvent faire toute la gamme des codes ASCII, alors difficile d'utiliser des mots clés comme séparateur. En plus des mots clés, il faut aussi travailler aussi avec les quantités de données reçues.
Il y a de bons exemples sur vbfrance.


Les WS sont très puissants et permettent n'importe quel type d'échange, mais ça demandera plus de temps à développer.


PS : les mots en gras sont les mots clés à rechercher sur vbfrance.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
Vlavv Messages postés 20 Date d'inscription samedi 16 juillet 2005 Statut Membre Dernière intervention 3 septembre 2009
13 févr. 2006 à 18:30
Merci de vos réponses ! J'avais en effet déjà cherché plusieurs fois sur vbfrance mais je ne trouvais pas de transfert de fichiers et non de simples txt ou de connexions ftp.
Vlavv Messages postés 20 Date d'inscription samedi 16 juillet 2005 Statut Membre Dernière intervention 3 septembre 2009
17 févr. 2006 à 20:53
Salut les amis

J'ai adapté le transfert aux Winsocks, ça donne la chose suivant :

Tout d'abord il faut le programme 'envoi' (qui envoie) et le programme 'recept' (qui reçoit :p).
Dans le prg envoi on met un Winsock client qui s'appelle 'cl' ainsi qu'un bouton qui se nomme 'Command1', et dans le prg recept un Winsock serveur, 'se'.
Le code suivant est dans l'ordre dans lequel il s'exécute normalement.


<HR>
'Prg envoi
Dim orPath As String
'Chemin du fichier à envoyer
Dim ip As String 'IP du serveur auquel le fichier est envoyé



'Prg recpt
Dim coPath As String 'Chemin d'enregistrement du fichier


'Prg recpt
Private Sub
Form_Load()
coPath = "..." 'Champ à remplir !!
se.LocalPort = 12666
se.Listen
End Sub

'Prg envoi

Private Sub Form_Load()
orPath = "..." 'Champ à remplir !!
ip = "..." 'Champ à remplir !!
cl.Connect ip, 12666
End Sub


'Prg recpt
Private Sub se_ConnectionRequest(ByVal requestID As Long)
se.Close
se.Accept requestID
End Sub


'Prg envoi
Private Sub Command1_Click()
Dim b() As Byte


Open orPath For Binary Access Read As #1
ReDim b(LOF(1) - 1)
Get #1, , b()
Close #1


cl.SendData b()
End Sub


'Prg recpt
Private Sub se_DataArrival(ByVal bytesTotal As Long)
Dim data() As Byte
se.GetData data()


Open coPath For Binary Access Write As #1
Put #1, , data()
Close #1
End Sub

<HR>

Bon c'qu'est ballot c'est qu'on peut pas envoyer plus de 8ko, faut toujours qu'y ait un truc qui cloche... :'-(
Qu'en pensez vous ?

-Vlavv
Rejoignez-nous