nihonsx5
Messages postés20Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention16 février 2014
-
2 juin 2007 à 18:59
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 2007
-
3 juin 2007 à 22:08
Bonjour,
je suis en train de faire un programme pour uploader des images sur des serveurs prévus à cet effet (Imagevenue etc...)
Mon problème est que je n'arrive pas à uploader plus de 2 images en même temps. J'ai essayé les threads que ce soit en
poolthread (avec un maxthreads à plus de 2), ou en delegate etc...
Je me suis alors dit que j'allais faire un test avec les backgroundworker. Pareil !! Je n'arrive pas à lancer 3 uploads en
même temps.
Pour l'envoi des images, ça fonctionne. Le problème, c'est l'envoi simultané de 3 images. Ce n'est pas le serveur qui en cause, mais bien mon programme.
Pour les essais avec les delegates et autres, j'avais bien 2 threads upload en "running" mais le 3ème était en "waitsleepjoin".
Je ne comprends pas pourquoi il est en attente, il aurait dû être aussi "running"...
Je vous mets l'exemple à la va vite que j'ai fait pour les backgroundworker.
' Ce sont mes 3 images
Dim filepath1 As String = "C:\test\A.jpg"
Dim filepath2 As String = "C:\test\B.jpg"
Dim filepath3 As String = "C:\test\C.jpg"
' mes 3 résultats
Dim result1 As String = ""
Dim result2 As String = ""
Dim result3 As String = ""
' mon 1er thread pour envoyer la 1ère image
Private Sub bgw1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgw1.DoWork
Dim boundary As String = ("----------" & DateTime.Now.Ticks.ToString("x"))
Dim Postheader() As Byte
Dim myStream As FileStream = Nothing
Dim requestStream As Stream = Nothing
Dim myResponse As HttpWebResponse = Nothing
Dim myReader As StreamReader = Nothing
Try
Dim myRequest As HttpWebRequest = DirectCast(WebRequest.Create("http://www.imagevenue.com/upload.php"), HttpWebRequest)
myRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; ru; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6"
myRequest.ContentType = ("multipart/form-data; boundary=" & boundary)
myRequest.KeepAlive = False
myRequest.ServicePoint.Expect100Continue = True
myRequest.Method = "POST"
myRequest.AllowWriteStreamBuffering = False
Dim bytes As Byte() = Encoding.ASCII.GetBytes((ChrW(13) & ChrW(10) & "--" & boundary & "--" & ChrW(13) & ChrW(10)))
myStream = New FileStream(filepath1, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
Dim taille As Long = ((Postheader.Length + myStream.Length) + bytes.Length)
myRequest.ContentLength = taille
requestStream = myRequest.GetRequestStream
' On envoie les 1ères données
requestStream.Write(Postheader, 0, Postheader.Length)
Const BufferSize As Integer = 4096
Dim content As Byte() = New Byte(BufferSize - 1) {}
Dim dataRead As Integer
Dim dataReads As Long = 0
' On envoie l'image
While True
dataRead = myStream.Read(content, 0, BufferSize)
If dataRead = 0 Then
Exit While
End If
requestStream.Write(content, 0, dataRead)
dataReads += dataRead
bgw1.ReportProgress(Math.Round(CDbl((dataReads / myStream.Length) * 100), 0))
End While
' On envoie les dernières données
requestStream.Write(bytes, 0, bytes.Length)
requestStream.Close()
requestStream.Dispose()
myStream.Close()
myStream.Dispose()
myResponse = DirectCast(myRequest.GetResponse, HttpWebResponse)
myReader = New StreamReader(myResponse.GetResponseStream, Encoding.UTF8)
Dim myResult As String = myReader.ReadToEnd
myResponse.Close()
myReader.Close()
myReader.Dispose()
If myResult.Contains("successfully") Then
If (myResult.Contains("[http://") AndAlso myResult.Contains("[/URL ")) Then
myResult = myResult.Substring(myResult.IndexOf("[URL=http://"))
myResult = myResult.Remove((myResult.IndexOf("]", 0) + 6))
ElseIf (myResult.Contains("")) Then
myResult = myResult.Substring(myResult.IndexOf("", 0) + 6))
End If
result1 = myResult
End If
Catch exception As Exception
Finally
Try
If (Not requestStream Is Nothing) Then
requestStream.Close()
requestStream.Dispose()
End If
If (Not myStream Is Nothing) Then
myStream.Close()
myStream.Dispose()
End If
If (Not myResponse Is Nothing) Then
myResponse.Close()
myResponse = Nothing
End If
If (Not myReader Is Nothing) Then
myReader.Close()
myReader.Dispose()
End If
Catch 'obj2 As Object
End Try
End Try
End Sub
Private Sub bgw2_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgw2.DoWork
' C'est la même chose que pour le 1er backgroundworker sauf que l'on utilse la 2ème image
End Sub
Private Sub bgw3_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgw3.DoWork
' C'est la même chose que pour le 1er backgroundworker sauf que l'on utilse la 3ème image
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' On lance les 3 backgroundworker
bgw1.RunWorkerAsync()
bgw2.RunWorkerAsync()
bgw3.RunWorkerAsync()
End Sub
' Pour afficher la progression
Private Sub bgw1_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bgw1.ProgressChanged
ProgressBar1.Value = e.ProgressPercentage
End Sub
Private Sub bgw2_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bgw2.ProgressChanged
ProgressBar2.Value = e.ProgressPercentage
End Sub
Private Sub bgw3_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bgw3.ProgressChanged
ProgressBar3.Value = e.ProgressPercentage
End Sub
nihonsx5
Messages postés20Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention16 février 2014 3 juin 2007 à 16:25
bonjour,
en fait j'avais tout faux. Je suis limité à 2 connections max par le serveur.
J'ai essayé un logiciel qui fait la même chose (upload d'images sur serveur). Je pensais qu'il faisait vraiment
+ de 2 connections en même temps, car on pouvait modifier le nombre de threads.
J'ai regardé les ports ouverts, et il n'y en a que 2 d'ouverts à chaque fois.