Envoyer un fichier de plus de 8Ko dans un NetworkStream...

Totoroyamada
Messages postés
31
Date d'inscription
jeudi 26 mai 2005
Statut
Membre
Dernière intervention
17 novembre 2005
- 14 juin 2005 à 12:01
teo770
Messages postés
2
Date d'inscription
mardi 14 novembre 2000
Statut
Membre
Dernière intervention
27 août 2006
- 26 août 2006 à 23:40
Bonjour, j'ai récupéré sur le net (je ne sais malheureusement plus où)
un code pour envoyer des fichiers par réseau, seulement je suis
confronté à un petit problème (mais gros pour moi), à savoir la taille
des paquets TCP... Du coup quand j'envoie un fichier, quand il arrive
il ne fait plus que 8Ko... et évidemment n'est plus valide...

Ci-joint le code, il faut juste une Form1 et 2 boutons bAttendre et
bEnvoyer, ainsi qu'un fichier à envoyer ("C:\Mes
Documents\vb1\Test\video.mov" dans mon exemple). Il est configuré pour
marcher en local.

Imports System.Net.Sockets
Imports System.Net
Imports System.Text
Imports System.IO



Const portNo As Integer = 500


Dim localAdd As System.Net.IPAddress = _


IPAddress.Parse("127.0.0.1")


'On attend de 127.0.0.1



Dim listener As New TcpListener(localAdd, portNo)



Private Sub bAttendre_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bAttendre.Click


Me.Cursor = Cursors.WaitCursor


Attendre()


Me.Cursor = Cursors.Default


End Sub



Private Sub bEnvoyer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bEnvoyer.Click


Me.Cursor = Cursors.WaitCursor


Envoyer()


Me.Cursor = Cursors.Default


End Sub



Private Sub Attendre()



listener.Start()


Console.WriteLine("Listening...")


Label1.Text = "En attente..."



Dim tcpClient As TcpClient = listener.AcceptTcpClient()


Dim NWStream As NetworkStream = tcpClient.GetStream


Dim bytesToRead(tcpClient.ReceiveBufferSize) As Byte



'---read incoming stream


Dim numBytesRead As Integer = NWStream.Read(bytesToRead, 0, CInt(tcpClient.ReceiveBufferSize))



'---write the bytes to file


Const FILE_NAME = "C:\Mes Documents\vb1\Test\newvideo.mov"


Dim fs As System.IO.FileStream


fs = New FileStream(FILE_NAME, FileMode.CreateNew, FileAccess.Write)


fs.Write(bytesToRead, 0, numBytesRead)



fs.Close()



Label1.Text = "Fichier reçu!"



tcpClient.Close()


listener.Stop()



End Sub



Private Sub Envoyer()


Const portNo = 500


Const FILE_NAME = "C:\Mes Documents\vb1\Test\video.mov"


Label1.Text = "Envoi en cours..."


Dim tcpClient As New System.Net.Sockets.TcpClient


'On envoie à 127.0.0.1


tcpClient.Connect("127.0.0.1", portNo)



Dim NWStream As NetworkStream = tcpClient.GetStream


Dim bytesToSend(tcpClient.ReceiveBufferSize) As Byte



Dim fs As FileStream


fs = New FileStream(FILE_NAME, FileMode.Open, FileAccess.Read)



Dim numBytesRead As Integer = fs.Read(bytesToSend, 0, bytesToSend.Length)


fs.Close()



'---send the text


NWStream.Write(bytesToSend, 0, numBytesRead)



Label1.Text = "Envoi effectué!"



tcpClient.Close()


End Sub




Bref, si quelqu'un pouvait m'expliquer comment séparer les paquets et
les joindre à l'arrivée, je lui en serai éternellement reconnaissant...

2 réponses

Totoroyamada
Messages postés
31
Date d'inscription
jeudi 26 mai 2005
Statut
Membre
Dernière intervention
17 novembre 2005

14 juin 2005 à 17:28
Bon j'ai à demi résolu mon problème, à savoir que je fixe moi-même

tcpClient.ReceiveBufferSize

Alors pour un petit fichier (2Mo), ça passe, par contre pour du gros non... j'ai donc toujours besoin de diviser tout ça.

Je me suis inspiré de la source "Splitteur de fichier" pour essayer de
séparer ça en petit paquets que j'enverrai successivement, mais j'ai un
problème au niveau de la réception...

Donc je suis toujours en attente d'une main secourable!
0
teo770
Messages postés
2
Date d'inscription
mardi 14 novembre 2000
Statut
Membre
Dernière intervention
27 août 2006

26 août 2006 à 23:40
Des avancées avec ce problème ?

En faite, je pense qu'il y a une limite aux buffersize, non ?

Merci
0