Private nblist As Integer Dim bKW() As BackgroundWorker
Dim _ping As New Ping
Dim ligne As String Dim ippoint() As IPEndPoint
Dim lvi As ListViewItem Dim Conn, sql As String Dim Cnx As OleDbConnection Dim Cmd As OleDbCommand Dim Dta As OleDbDataAdapter Dim Dts As New DataSet Dim Dtt As DataTable Dim Rownum As Integer Dim Dtr As DataRow Dim Cmdb As OleDbCommandBuilder Dim myIPAddress As System.Net.IPAddress Dim p As Integer = 1314 Dim sk() As Socket
Dim pcourant As Integer Delegate Sub dEcrit(ByVal Texte As String) Private Sub Ecrit(ByVal Texte As String) Me.ListBox1.Items.Add(Texte)
End Sub
Sub EcritureMessage(ByVal Message As String, Optional ByVal Type As Integer = 0) Dim Texte As String = "" Select Case Type Case 1 Texte &= "INFO : " Case 2 Texte &= "ERREUR : " Case Else End Select Texte &= Message Try Me.Invoke(New dEcrit(AddressOf Ecrit), Texte) Catch ex As Exception Exit Sub End Try End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Timer1.Enabled = True Timer1.Start()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
connex()
End Sub
Sub ajouter2()
If bKW IsNot Nothing Then For i = 0 To bKW.Count - 1 bKW(i) = New BackgroundWorker() bKW(i).WorkerReportsProgress = True bKW(i).WorkerSupportsCancellation = True AddHandler bKW(i).DoWork, AddressOf DoWork
Private Sub DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
Dim worker As BackgroundWorker = CType(sender, BackgroundWorker)
For i = 0 To sk.Count - 1 And ippoint.Count - 1 If sk(i).Connected Then Dim Mess As Byte() = System.Text.Encoding.UTF8.GetBytes("@00R12*") Dim Envoi As Integer = sk(i).Send(Mess) Dim Bytes(255) As Byte Dim Recu As Integer Try Recu = sk(i).Receive(Bytes) Catch ex As Exception 'Erreur si fermeture du socket pendant la réception
'EcritureMessage("Deconnecté sur serveur.", 1) End Try Dim Message As String Message = System.Text.Encoding.UTF8.GetString(Bytes) Message = Message.Substring(0, Recu) + "" + ippoint(i).Address.ToString EcritureMessage(Message) Else
If Not sk(i).Connected Then If _ping.Send(ippoint(i).Address.ToString).Status = IPStatus.Success Then sk(i) = New System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) sk(i).Connect(ippoint(i)) EcritureMessage("Connexion reussite avec la carte!" + ippoint(i).Address.ToString, 1)
Else
EcritureMessage("Connexion non reussite avec la carte " + ippoint(i).Address.ToString, 2)
End If
System.Threading.Thread.Sleep(200) End If
End If
Next
End Sub
Private Sub WorkerProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) ' I did something! End Sub
Private Sub WorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) ' I'm done! End Sub Sub ajouter() If ippoint Is Nothing Then For i = 0 To ippoint.Count - 1 ippoint(i) = New IPEndPoint(IPAddress.Parse(ligne), p) Next
End If
End Sub Sub ajouter1() If sk Is Nothing Then For i = 0 To sk.Count - 1 sk(i) = New System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Next
End If End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Call ajouter2()
End Sub
Sub connex() For i = 0 To sk.Count - 1 And ippoint.Count - 1 If _ping.Send(ippoint(i).Address.ToString).Status = IPStatus.Success Then sk(i).Connect(ippoint(i)) EcritureMessage("Connexion reussite avec la carte!" + ippoint(i).Address.ToString, 1)
Else
EcritureMessage("Connexion non reussite avec la carte " + ippoint(i).Address.ToString, 2) End If
Next End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim dr As OleDb.OleDbDataReader Conn = "provider = microsoft.jet.oledb.4.0 ; data source =" & "C:\BDD.mdb" Cnx = New OleDbConnection Cnx.ConnectionString = Conn Cnx.Open() sql = "select Table_Equipements.Adr_IP from Table_Equipements" Cmd = New OleDbCommand(sql) Dta = New OleDbDataAdapter(Cmd) Cmd.Connection() = Cnx dr = Cmd.ExecuteReader Dim ligne As String While dr.Read()
' exploitation ligne courante ligne = "" For i = 0 To dr.FieldCount - 1 ligne += dr(i).ToString
If ippoint Is Nothing Then ReDim ippoint(0) Else
ReDim Preserve ippoint(ippoint.Count) End If If sk Is Nothing Then
ReDim sk(0)
Else ReDim Preserve sk(sk.Count)
End If If bKW Is Nothing Then
ReDim bKW(0) Else ReDim Preserve bKW(bKW.Count)
End If ippoint(ippoint.Count - 1) = New IPEndPoint(IPAddress.Parse(ligne), p) sk(sk.Count - 1) = New System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
bKW(bKW.Count - 1) = New BackgroundWorker()
ajouter() ajouter1()
ajouter2()
Next i
End While
dr.Close() End Sub End Class
mon probleme que le backgroundworker parcour tout la liste a chaque fois
comment chaque backroundworker i dowork run sur sk(i)
si le i=1 run sk(1)
j'ai besoin d'un aide
jordane45
Messages postés38241Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention17 septembre 2024345 29 sept. 2014 à 15:02
Bonjour,
Je n'ai pas vraiment compris ta question...
Déjà.. sur quelle partie EXACTEMENT de ton code rencontres tu un souci ?
zaynoubagl
Messages postés58Date d'inscriptionmercredi 11 septembre 2013StatutMembreDernière intervention19 octobre 2014 29 sept. 2014 à 15:16
mon application fonctionne comme ca :
dams le laod de mon application
connect a ma base de donnée access
selectionner tous les adress ip dans ma table equipemment
a chaque selection d'une adress ip creer :
une liste dynamique des socket
une liste dynamique des IPendpoint
une liste dynamique d'un background worker
ajouter() pour la liste des socket
ajouter1() pour la liste des ipendpoint
ajouter2() pour la liste de bkw
les listes sont creer automatiquemment fonctionne bien
le problemme dans l'evennement dowork de chaque backgroundworker
je voulais quant je lance mon timer chaque backgroundworker do work execute sur sk(i) precise
bw(1).dowork sur sk(1)
zaynoubagl
Messages postés58Date d'inscriptionmercredi 11 septembre 2013StatutMembreDernière intervention19 octobre 2014 29 sept. 2014 à 15:19
le problemme ici
Private Sub DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
Dim worker As BackgroundWorker = CType(sender, BackgroundWorker)
'le i c'est mon problemme
' For i = 0 To sk.Count - 1 And ippoint.Count - 1 If sk(i).Connected Then Dim Mess As Byte() = System.Text.Encoding.UTF8.GetBytes("@00R12*") Dim Envoi As Integer = sk(i).Send(Mess) Dim Bytes(255) As Byte Dim Recu As Integer Try Recu = sk(i).Receive(Bytes) Catch ex As Exception 'Erreur si fermeture du socket pendant la réception
'EcritureMessage("Deconnecté sur serveur.", 1) End Try Dim Message As String Message = System.Text.Encoding.UTF8.GetString(Bytes) Message = Message.Substring(0, Recu) + "" + ippoint(i).Address.ToString EcritureMessage(Message) Else
If Not sk(i).Connected Then If _ping.Send(ippoint(i).Address.ToString).Status = IPStatus.Success Then sk(i) = New System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) sk(i).Connect(ippoint(i)) EcritureMessage("Connexion reussite avec la carte!" + ippoint(i).Address.ToString, 1)
Else
EcritureMessage("Connexion non reussite avec la carte " + ippoint(i).Address.ToString, 2)
End If
System.Threading.Thread.Sleep(200) End If
End If
' Next
zaynoubagl
Messages postés58Date d'inscriptionmercredi 11 septembre 2013StatutMembreDernière intervention19 octobre 2014 29 sept. 2014 à 15:20
il prenne toujour le i=0
je voulais a chaque fois prendre le i precesise
jordane45
Messages postés38241Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention17 septembre 2024345 29 sept. 2014 à 15:23
Tu as des paramètres (sender et e ) dans ta SUB
Private Sub DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
Qu'est qu'ils valent lorsque tu entres dans ta SUB ?
zaynoubagl
Messages postés58Date d'inscriptionmercredi 11 septembre 2013StatutMembreDernière intervention19 octobre 2014 29 sept. 2014 à 15:29
je voulais envoyer mon trame pour chaque socket connected
dans ma liste des socket sk()
n'est pas correcte.
Si tu regardes msdn a propos de l'opérateur AND http://msdn.microsoft.com/en-us/library/sdbcfyzh.aspx tu t'apercevras que ta boucle ne s'exécutera qu'une fois puisque la valeur maximale obtenue avec l'opérateur AND est 1.
@jordane45
Peux tu me dire comment on indique un lien (url) lorsqu'on a pas de compte membre. Merci d'avance.
Ne pas tenir compte de ce message car ce n'est valable que lorsque l'expression est entre parenthèses. Veuillez excuser mon intrusion.
jordane45
Messages postés38241Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention17 septembre 2024345 Modifié par jordane45 le 30/09/2014 à 14:32
Banana, pour mettre un LIEN il suffit d'utiliser les "[" "]"
[URL_DU_LIEN Nom_du_lien ]
Par exemple :
[http ://www.google.fr Google est mon ami ^^ ]