[VB.NET] Envoie de fichier avec socket !!

Envoie de fichier avec socket !! [VB.NET] - C#/.NET managed - Programmation

Marsh Posté le 29-03-2005 à 14:36:59    

Bonjour, j'ai créer un tchat serveur/client avec les sockets mais je voudrais créer un transfert de fichier ( texte, son, image ) via la socket. En gros comme pour MSN pouvoir envoyer un fichier....
Je connais les etapes :
1) Recuperer le chemin du fichier
2) Ouvrir le fichier
3) Lire les données du fichier
4) Les mettre dans le buffer puis les envoyer dans la socket
5) Fermer le fichier
 
Mais je bloque a l'etape 2 car j'utilise la class STREAM mais il parrait que c'est pour pour les fichier texte....
 
Si quelqu'un pouvais m'aide rou de donner des exmeples, des liens ...
 
Merci bcp

Reply

Marsh Posté le 29-03-2005 à 14:36:59   

Reply

Marsh Posté le 29-03-2005 à 14:42:54    

Un FileStream est utilisable pour n'importe quel type de fichier ;)

Reply

Marsh Posté le 29-03-2005 à 15:11:15    

et bah avec moi ca marchait pas ...
Regarde j'ai fait ca :
 
 
        Dim fs = New FileStream(FILE_NAME, FileMode.Open, FileAccess.Read)
 
        Dim r As New BinaryReader(fs)
 
        r.Read()
 
        Dim bufferRead() As Byte
 
        bufferRead = r.ReadBytes(CType(fs.Length, Integer))
 
Maintenant bufferRead combien les  données de limage sous forme de bytes mais comment l'envoyer dans la socket??? car l'argument pour envoyer est un truc en STRING :
 
Voici ma fonction Socket.send :
 
Public Sub Send(ByVal Data As [String])
        buffer = Encoding.UTF8.GetBytes(Data)
        sckclient.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, AddressOf SendCallback, sckserver)
    End Sub
 
Merci

Reply

Marsh Posté le 29-03-2005 à 15:14:46    

C'est quoi ton premier r.read() :??: Et la méthode BeginSend prend des bytes :

Public Function BeginSend( _
   ByVal buffer() As Byte, _
   ByVal offset As Integer, _
   ByVal size As Integer, _
   ByVal socketFlags As SocketFlags, _
   ByVal callback As AsyncCallback, _
   ByVal state As Object _
) As IAsyncResult


 

Reply

Marsh Posté le 29-03-2005 à 15:30:02    

Oui je sais je fait un return dans ma fonction comme ca je retourne la valeur de bufferRead. Maintenant je vais appller ma fonction pour envoyer ca : Socket.send("la il faut un argument du type string or moi c'est deja en byte..." )
 
Et si je modifie ma fonction Socket.send en  :

Code :
  1. Public Sub Send(ByVal Data As byte)
  2.         sckclient.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, AddressOf SendCallback, sckserver)
  3.     End Sub


et bah j'ai une erreur...
 
"Une valeur de type 'Tableau 1-dimensionnel de Byte' ne peut pas être convertie en 'byte'."
 
Merci


Message édité par fdiedler le 29-03-2005 à 15:31:48
Reply

Marsh Posté le 29-03-2005 à 15:43:09    

Regarde les paramètres de ta fonction send :

Public Sub Send(ByVal Data As byte)


Tu lui demande un objet de type byte, alors qu'il faut un tableau :

Public SubSend(ByVal data As Byte())

Reply

Marsh Posté le 29-03-2005 à 15:50:38    

Effectivement j'ai plus l'erreur je vais tester et je te repost si jamais y'a un probleme ...
En tt cas merci bcp de ton aide
Fdiedler

Reply

Marsh Posté le 29-03-2005 à 15:56:02    

Code :
  1. Public Sub EnvoyerFichier(ByVal msg As Byte())
  2.         sckclient.BeginSend(msg, 0, msg.Length, SocketFlags.None, AddressOf SendCallback, sckserver)
  3.     End Sub


Lors de l'envoie il me dit que la reference object n'est pas définit a l'insistance d'un object ??? ca veur dire quoi? et pourquoi j'ai ce message ?

Reply

Marsh Posté le 29-03-2005 à 15:57:30    

Doit y avoir un des objets qui a pour valeur Nothing, met un point d'arrêt sur l'appel à BeginSend, et regarde ce qu'il y a dans les différentes variables

Reply

Marsh Posté le 29-03-2005 à 16:02:55    

Oui ta raison sckserver vaut nothing...
J'ai fait un test pour un message text et il n'a pas la valeur de nothing...  
Je comprends pas pourquoi ??

Code :
  1. Public Sub Send(ByVal Data As [String])
  2.         buffer = Encoding.UTF8.GetBytes(Data)
  3.         sckclient.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, AddressOf SendCallback, sckserver)
  4.     End Sub


Avec cette fonction je fait transiter tous les messages texte ( ceux que tu envoient quand tu tchat )
 
....

Reply

Marsh Posté le 29-03-2005 à 16:02:55   

Reply

Marsh Posté le 29-03-2005 à 18:02:01    

tien je te file mon adresse MSN ce sera plus facile et puis je pulierais la reponse sur le forum
fdiedler999@hotmail.com

Reply

Marsh Posté le 01-04-2005 à 18:01:44    

Comment on fait pour mettre la mension RESOLU ....lol
Dsl je me suis planter de topic au fait il faut aller dans celui : Probleme buffer


Message édité par fdiedler le 01-04-2005 à 18:04:06
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed