Bonjour,
Avec le control Winsock, je fais écouter un serveur sur un port en UDP
non connecté).
Je reçois une bonne quantité de flux provenant de plusieurs machines.
Exemple :
Réception "AAA" de la machine "192.168.0.1"
Réception "BBB" de la machine "192.168.0.2"
Réception "CCC" de la machine "192.168.0.3"
Parfois, je reçois du flux d'une machine donnée pendant que la propriété
"RemoteHostIP" du control Winsock me renvoie l'adresse d'une autre
Comme ceci dans l'exemple :
Réception "AAA" de la machine "192.168.0.2"
Pourtant c'est "192.168.0.1" qui a envoyée "AAA" et c'est certain.
J'ai sans doute oublier quelque chose dans le paramètrage de Winsock en
Une partie de mon code ci-dessous. Le reste du code n'a aucun lien avec
control Winsock.
Merci infiniment pour votre aide précieuse
NS
Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As
Dim strData As String
Dim strRemoteHost As String
strRemoteHost = Winsock1(Index).RemoteHostIP
Debug.Print strRemoteHost
Winsock1(Index).GetData strData, vbString
Debug.Print "Réception " & strData & " de la machine " & strRemoteHost
End Sub
Bonjour,
Avec le control Winsock, je fais écouter un serveur sur un port en UDP
non connecté).
Je reçois une bonne quantité de flux provenant de plusieurs machines.
Exemple :
Réception "AAA" de la machine "192.168.0.1"
Réception "BBB" de la machine "192.168.0.2"
Réception "CCC" de la machine "192.168.0.3"
Parfois, je reçois du flux d'une machine donnée pendant que la propriété
"RemoteHostIP" du control Winsock me renvoie l'adresse d'une autre
Comme ceci dans l'exemple :
Réception "AAA" de la machine "192.168.0.2"
Pourtant c'est "192.168.0.1" qui a envoyée "AAA" et c'est certain.
J'ai sans doute oublier quelque chose dans le paramètrage de Winsock en
Une partie de mon code ci-dessous. Le reste du code n'a aucun lien avec
control Winsock.
Merci infiniment pour votre aide précieuse
NS
Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As
Dim strData As String
Dim strRemoteHost As String
strRemoteHost = Winsock1(Index).RemoteHostIP
Debug.Print strRemoteHost
Winsock1(Index).GetData strData, vbString
Debug.Print "Réception " & strData & " de la machine " & strRemoteHost
End Sub
Bonjour,
Avec le control Winsock, je fais écouter un serveur sur un port en UDP
non connecté).
Je reçois une bonne quantité de flux provenant de plusieurs machines.
Exemple :
Réception "AAA" de la machine "192.168.0.1"
Réception "BBB" de la machine "192.168.0.2"
Réception "CCC" de la machine "192.168.0.3"
Parfois, je reçois du flux d'une machine donnée pendant que la propriété
"RemoteHostIP" du control Winsock me renvoie l'adresse d'une autre
Comme ceci dans l'exemple :
Réception "AAA" de la machine "192.168.0.2"
Pourtant c'est "192.168.0.1" qui a envoyée "AAA" et c'est certain.
J'ai sans doute oublier quelque chose dans le paramètrage de Winsock en
Une partie de mon code ci-dessous. Le reste du code n'a aucun lien avec
control Winsock.
Merci infiniment pour votre aide précieuse
NS
Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As
Dim strData As String
Dim strRemoteHost As String
strRemoteHost = Winsock1(Index).RemoteHostIP
Debug.Print strRemoteHost
Winsock1(Index).GetData strData, vbString
Debug.Print "Réception " & strData & " de la machine " & strRemoteHost
End Sub
Salut,
Je vois que tu as un groupe de controle, tu as plusieurs winsock qui
ecoutent ?
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Salut,
Je vois que tu as un groupe de controle, tu as plusieurs winsock qui
ecoutent ?
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Salut,
Je vois que tu as un groupe de controle, tu as plusieurs winsock qui
ecoutent ?
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Ton code me semble correct à priori. Je dois dire que j'en ai écrit du
semblable, mais je n'ai pas testé en charge importante.
Tu as plusieurs occurence de contrôle winsock car je suppose que tu es en
écoute de plusieurs machines, et donc quand une demande de connexion
tu fais un load winsock1(nbWinsock).
La question que je me pose est la suivante:
L'indexation d'un objet sous VB6 est-elle VRAIMENT la création d'un nouvel
objet, ou bien n'y a-t-il pas le risque d'un "certain mélange" ?
Au quel cas, quand tu es en train de charger les datas, il se pourrait que
si un autre échange arrive, alors les informations fournies par le
se mélangent. Pour que cela ne se mélange pas, il faudrait qu'une deuxième
occurence de la sub winsock1_dataarrival soit instanciée, et ça
que ce soit VRAIEMNT le cas.
D'ailleurs en .NET, les contrôles indexé ne sont pas supportés, sauf à
écrire soit même la mécanique ... Donc ce n'est pas si transparent.
Pour en être sûr, et si tu a le temps et que c'est possible, au lieu
d'utiliser des winsocks indéxé, ne pourrais-tu pas utiliser des winsocks
différents (winsock1, winsock2, etc...) sur des ports différents
car dans ce cas, on est certain que les objets sont différents, et les sub
associées aussi.
personnellement, c'est le test que je ferai. Sauf que les conditions ne
peut être pas faciles à remplir.
Ci dessous un morceau de code pour gérer un serveur à l'écoute sur TCP ou
UDP au choix, que j'ai écrit il y a bien longtemps. Je pense que tu y
retrouveras la même mécanique que la tienne. Donc ton idée est à priori
juste, mais encore une fois, je n'ai pas testé en environnement VRAIMENT
agressif, c'est à dire des connexions qui arrivent en rafale.
Private Sub mnuServerStart_Click()
If frmSetting.Protocol = TCPProtocole Then
TCPServer(0).Protocol = sckTCPProtocol
TCPServer(0).LocalPort = frmSetting.LocalPortNumber
TCPServer(0).Listen
Else
TCPServer(0).Protocol = sckUDPProtocol
TCPServer(0).LocalPort = frmSetting.LocalPortNumber
TCPServer(0).Bind TCPServer(0).LocalPort
End If
mnuServerStart.Enabled = False
mnuServerStop.Enabled = True
End Sub
Private Sub mnuServerStop_Click()
Dim I As Integer
TCPServer(0).Close
For I = TCPServerMax To 1 Step -1
Unload TCPServer(I)
Next I
mnuServerStart.Enabled = True
mnuServerStop.Enabled = False
End Sub
Private Sub TCPServer_ConnectionRequest(Index As Integer, ByVal requestID
Long)
If Index = 0 Then
TCPServerMax = TCPServerMax + 1
Load TCPServer(TCPServerMax)
TCPServer(TCPServerMax).RemotePort = 0
TCPServer(TCPServerMax).Accept requestID
End If
End Sub
Private Sub TCPServer_DataArrival(Index As Integer, ByVal bytesTotal As
Long)
Dim strData As String
Dim I As Long
Dim From As String
Dim OneMesure As String
Dim J As Long
TCPServer(Index).GetData strData
From = TCPServer(Index).RemoteHostIP
J = InStr(strData, "!")
While J > 0
OneMesure = Left(strData, J - 1)
I = InStr(OneMesure, "|") - 1
SaveRemoteInfo Left(OneMesure, I) & " from " & From,
I + 2, 8), Mid(OneMesure, I + 10, 4), CByte(Right(OneMesure,
Len(OneMesure) - I - 13))
strData = Right(strData, Len(strData) - J)
J = InStr(strData, "!")
Wend
End Sub
Ton code me semble correct à priori. Je dois dire que j'en ai écrit du
semblable, mais je n'ai pas testé en charge importante.
Tu as plusieurs occurence de contrôle winsock car je suppose que tu es en
écoute de plusieurs machines, et donc quand une demande de connexion
tu fais un load winsock1(nbWinsock).
La question que je me pose est la suivante:
L'indexation d'un objet sous VB6 est-elle VRAIMENT la création d'un nouvel
objet, ou bien n'y a-t-il pas le risque d'un "certain mélange" ?
Au quel cas, quand tu es en train de charger les datas, il se pourrait que
si un autre échange arrive, alors les informations fournies par le
se mélangent. Pour que cela ne se mélange pas, il faudrait qu'une deuxième
occurence de la sub winsock1_dataarrival soit instanciée, et ça
que ce soit VRAIEMNT le cas.
D'ailleurs en .NET, les contrôles indexé ne sont pas supportés, sauf à
écrire soit même la mécanique ... Donc ce n'est pas si transparent.
Pour en être sûr, et si tu a le temps et que c'est possible, au lieu
d'utiliser des winsocks indéxé, ne pourrais-tu pas utiliser des winsocks
différents (winsock1, winsock2, etc...) sur des ports différents
car dans ce cas, on est certain que les objets sont différents, et les sub
associées aussi.
personnellement, c'est le test que je ferai. Sauf que les conditions ne
peut être pas faciles à remplir.
Ci dessous un morceau de code pour gérer un serveur à l'écoute sur TCP ou
UDP au choix, que j'ai écrit il y a bien longtemps. Je pense que tu y
retrouveras la même mécanique que la tienne. Donc ton idée est à priori
juste, mais encore une fois, je n'ai pas testé en environnement VRAIMENT
agressif, c'est à dire des connexions qui arrivent en rafale.
Private Sub mnuServerStart_Click()
If frmSetting.Protocol = TCPProtocole Then
TCPServer(0).Protocol = sckTCPProtocol
TCPServer(0).LocalPort = frmSetting.LocalPortNumber
TCPServer(0).Listen
Else
TCPServer(0).Protocol = sckUDPProtocol
TCPServer(0).LocalPort = frmSetting.LocalPortNumber
TCPServer(0).Bind TCPServer(0).LocalPort
End If
mnuServerStart.Enabled = False
mnuServerStop.Enabled = True
End Sub
Private Sub mnuServerStop_Click()
Dim I As Integer
TCPServer(0).Close
For I = TCPServerMax To 1 Step -1
Unload TCPServer(I)
Next I
mnuServerStart.Enabled = True
mnuServerStop.Enabled = False
End Sub
Private Sub TCPServer_ConnectionRequest(Index As Integer, ByVal requestID
Long)
If Index = 0 Then
TCPServerMax = TCPServerMax + 1
Load TCPServer(TCPServerMax)
TCPServer(TCPServerMax).RemotePort = 0
TCPServer(TCPServerMax).Accept requestID
End If
End Sub
Private Sub TCPServer_DataArrival(Index As Integer, ByVal bytesTotal As
Long)
Dim strData As String
Dim I As Long
Dim From As String
Dim OneMesure As String
Dim J As Long
TCPServer(Index).GetData strData
From = TCPServer(Index).RemoteHostIP
J = InStr(strData, "!")
While J > 0
OneMesure = Left(strData, J - 1)
I = InStr(OneMesure, "|") - 1
SaveRemoteInfo Left(OneMesure, I) & " from " & From,
I + 2, 8), Mid(OneMesure, I + 10, 4), CByte(Right(OneMesure,
Len(OneMesure) - I - 13))
strData = Right(strData, Len(strData) - J)
J = InStr(strData, "!")
Wend
End Sub
Ton code me semble correct à priori. Je dois dire que j'en ai écrit du
semblable, mais je n'ai pas testé en charge importante.
Tu as plusieurs occurence de contrôle winsock car je suppose que tu es en
écoute de plusieurs machines, et donc quand une demande de connexion
tu fais un load winsock1(nbWinsock).
La question que je me pose est la suivante:
L'indexation d'un objet sous VB6 est-elle VRAIMENT la création d'un nouvel
objet, ou bien n'y a-t-il pas le risque d'un "certain mélange" ?
Au quel cas, quand tu es en train de charger les datas, il se pourrait que
si un autre échange arrive, alors les informations fournies par le
se mélangent. Pour que cela ne se mélange pas, il faudrait qu'une deuxième
occurence de la sub winsock1_dataarrival soit instanciée, et ça
que ce soit VRAIEMNT le cas.
D'ailleurs en .NET, les contrôles indexé ne sont pas supportés, sauf à
écrire soit même la mécanique ... Donc ce n'est pas si transparent.
Pour en être sûr, et si tu a le temps et que c'est possible, au lieu
d'utiliser des winsocks indéxé, ne pourrais-tu pas utiliser des winsocks
différents (winsock1, winsock2, etc...) sur des ports différents
car dans ce cas, on est certain que les objets sont différents, et les sub
associées aussi.
personnellement, c'est le test que je ferai. Sauf que les conditions ne
peut être pas faciles à remplir.
Ci dessous un morceau de code pour gérer un serveur à l'écoute sur TCP ou
UDP au choix, que j'ai écrit il y a bien longtemps. Je pense que tu y
retrouveras la même mécanique que la tienne. Donc ton idée est à priori
juste, mais encore une fois, je n'ai pas testé en environnement VRAIMENT
agressif, c'est à dire des connexions qui arrivent en rafale.
Private Sub mnuServerStart_Click()
If frmSetting.Protocol = TCPProtocole Then
TCPServer(0).Protocol = sckTCPProtocol
TCPServer(0).LocalPort = frmSetting.LocalPortNumber
TCPServer(0).Listen
Else
TCPServer(0).Protocol = sckUDPProtocol
TCPServer(0).LocalPort = frmSetting.LocalPortNumber
TCPServer(0).Bind TCPServer(0).LocalPort
End If
mnuServerStart.Enabled = False
mnuServerStop.Enabled = True
End Sub
Private Sub mnuServerStop_Click()
Dim I As Integer
TCPServer(0).Close
For I = TCPServerMax To 1 Step -1
Unload TCPServer(I)
Next I
mnuServerStart.Enabled = True
mnuServerStop.Enabled = False
End Sub
Private Sub TCPServer_ConnectionRequest(Index As Integer, ByVal requestID
Long)
If Index = 0 Then
TCPServerMax = TCPServerMax + 1
Load TCPServer(TCPServerMax)
TCPServer(TCPServerMax).RemotePort = 0
TCPServer(TCPServerMax).Accept requestID
End If
End Sub
Private Sub TCPServer_DataArrival(Index As Integer, ByVal bytesTotal As
Long)
Dim strData As String
Dim I As Long
Dim From As String
Dim OneMesure As String
Dim J As Long
TCPServer(Index).GetData strData
From = TCPServer(Index).RemoteHostIP
J = InStr(strData, "!")
While J > 0
OneMesure = Left(strData, J - 1)
I = InStr(OneMesure, "|") - 1
SaveRemoteInfo Left(OneMesure, I) & " from " & From,
I + 2, 8), Mid(OneMesure, I + 10, 4), CByte(Right(OneMesure,
Len(OneMesure) - I - 13))
strData = Right(strData, Len(strData) - J)
J = InStr(strData, "!")
Wend
End Sub
Salut
Je crois que cela est normal, tel que le programme est écrit. En effet les
arrivées des data sur les winsock ne peuvent pas être synchronisées
tu ne peux pas les prévoir.
Essaies ceci :
Crées plutot deux objets winsock : winsock1 et winsock2
Mets à zéro l'index de winsock2
Ton programme doit avoir un seul objet winsock pour écouter sur le port
(winsock1)..
Quand il y une demande de connexion (ConnectionRequest), tu dois
sur un des winsock indexés winsock2..
exemple :
Ecoute du port sur winsock1 :
sub form_load
winsock1.localport = numero de port
winsock1.listen
end sub
Acceptation de la connexion sur winsock2, créé dynamiquement par le
programme :
Private Sub Winsock1_ConnectionRequest( ByVal requestID As Long)
Dim ws As Winsock
Set ws = Winsock2(Winsock2.UBound + 1)
Load ws
ws.Accept requestID
End Sub
Private Sub Winsock2_DataArrival(Index As Integer, ByVal bytesTotal As
Winsock2(Index).GetData donrec, vbString
...
.....
End Sub
Tu pourras optimiser reprenant les objets winsock2 libérés suite à un
"ns" a écrit dans le message de
news:
> Bonjour,
>
> Avec le control Winsock, je fais écouter un serveur sur un port en UDP
(mode
> non connecté).
>
> Je reçois une bonne quantité de flux provenant de plusieurs machines.
> Exemple :
> Réception "AAA" de la machine "192.168.0.1"
> Réception "BBB" de la machine "192.168.0.2"
> Réception "CCC" de la machine "192.168.0.3"
>
> Parfois, je reçois du flux d'une machine donnée pendant que la propriété
> "RemoteHostIP" du control Winsock me renvoie l'adresse d'une autre
machine.
> Comme ceci dans l'exemple :
>
> Réception "AAA" de la machine "192.168.0.2"
> Pourtant c'est "192.168.0.1" qui a envoyée "AAA" et c'est certain.
>
> J'ai sans doute oublier quelque chose dans le paramètrage de Winsock en
UDP!
>
> Une partie de mon code ci-dessous. Le reste du code n'a aucun lien avec
mon
> control Winsock.
>
> Merci infiniment pour votre aide précieuse
> NS
>
>
> Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As
Long)
> Dim strData As String
> Dim strRemoteHost As String
>
> strRemoteHost = Winsock1(Index).RemoteHostIP
>
> Debug.Print strRemoteHost
>
> Winsock1(Index).GetData strData, vbString
> Debug.Print "Réception " & strData & " de la machine " & strRemoteHost
>
> End Sub
>
>
Salut
Je crois que cela est normal, tel que le programme est écrit. En effet les
arrivées des data sur les winsock ne peuvent pas être synchronisées
tu ne peux pas les prévoir.
Essaies ceci :
Crées plutot deux objets winsock : winsock1 et winsock2
Mets à zéro l'index de winsock2
Ton programme doit avoir un seul objet winsock pour écouter sur le port
(winsock1)..
Quand il y une demande de connexion (ConnectionRequest), tu dois
sur un des winsock indexés winsock2..
exemple :
Ecoute du port sur winsock1 :
sub form_load
winsock1.localport = numero de port
winsock1.listen
end sub
Acceptation de la connexion sur winsock2, créé dynamiquement par le
programme :
Private Sub Winsock1_ConnectionRequest( ByVal requestID As Long)
Dim ws As Winsock
Set ws = Winsock2(Winsock2.UBound + 1)
Load ws
ws.Accept requestID
End Sub
Private Sub Winsock2_DataArrival(Index As Integer, ByVal bytesTotal As
Winsock2(Index).GetData donrec, vbString
...
.....
End Sub
Tu pourras optimiser reprenant les objets winsock2 libérés suite à un
"ns" <ns@none.ns> a écrit dans le message de
news:38o1jgF5dhs94U1@individual.net...
> Bonjour,
>
> Avec le control Winsock, je fais écouter un serveur sur un port en UDP
(mode
> non connecté).
>
> Je reçois une bonne quantité de flux provenant de plusieurs machines.
> Exemple :
> Réception "AAA" de la machine "192.168.0.1"
> Réception "BBB" de la machine "192.168.0.2"
> Réception "CCC" de la machine "192.168.0.3"
>
> Parfois, je reçois du flux d'une machine donnée pendant que la propriété
> "RemoteHostIP" du control Winsock me renvoie l'adresse d'une autre
machine.
> Comme ceci dans l'exemple :
>
> Réception "AAA" de la machine "192.168.0.2"
> Pourtant c'est "192.168.0.1" qui a envoyée "AAA" et c'est certain.
>
> J'ai sans doute oublier quelque chose dans le paramètrage de Winsock en
UDP!
>
> Une partie de mon code ci-dessous. Le reste du code n'a aucun lien avec
mon
> control Winsock.
>
> Merci infiniment pour votre aide précieuse
> NS
>
>
> Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As
Long)
> Dim strData As String
> Dim strRemoteHost As String
>
> strRemoteHost = Winsock1(Index).RemoteHostIP
>
> Debug.Print strRemoteHost
>
> Winsock1(Index).GetData strData, vbString
> Debug.Print "Réception " & strData & " de la machine " & strRemoteHost
>
> End Sub
>
>
Salut
Je crois que cela est normal, tel que le programme est écrit. En effet les
arrivées des data sur les winsock ne peuvent pas être synchronisées
tu ne peux pas les prévoir.
Essaies ceci :
Crées plutot deux objets winsock : winsock1 et winsock2
Mets à zéro l'index de winsock2
Ton programme doit avoir un seul objet winsock pour écouter sur le port
(winsock1)..
Quand il y une demande de connexion (ConnectionRequest), tu dois
sur un des winsock indexés winsock2..
exemple :
Ecoute du port sur winsock1 :
sub form_load
winsock1.localport = numero de port
winsock1.listen
end sub
Acceptation de la connexion sur winsock2, créé dynamiquement par le
programme :
Private Sub Winsock1_ConnectionRequest( ByVal requestID As Long)
Dim ws As Winsock
Set ws = Winsock2(Winsock2.UBound + 1)
Load ws
ws.Accept requestID
End Sub
Private Sub Winsock2_DataArrival(Index As Integer, ByVal bytesTotal As
Winsock2(Index).GetData donrec, vbString
...
.....
End Sub
Tu pourras optimiser reprenant les objets winsock2 libérés suite à un
"ns" a écrit dans le message de
news:
> Bonjour,
>
> Avec le control Winsock, je fais écouter un serveur sur un port en UDP
(mode
> non connecté).
>
> Je reçois une bonne quantité de flux provenant de plusieurs machines.
> Exemple :
> Réception "AAA" de la machine "192.168.0.1"
> Réception "BBB" de la machine "192.168.0.2"
> Réception "CCC" de la machine "192.168.0.3"
>
> Parfois, je reçois du flux d'une machine donnée pendant que la propriété
> "RemoteHostIP" du control Winsock me renvoie l'adresse d'une autre
machine.
> Comme ceci dans l'exemple :
>
> Réception "AAA" de la machine "192.168.0.2"
> Pourtant c'est "192.168.0.1" qui a envoyée "AAA" et c'est certain.
>
> J'ai sans doute oublier quelque chose dans le paramètrage de Winsock en
UDP!
>
> Une partie de mon code ci-dessous. Le reste du code n'a aucun lien avec
mon
> control Winsock.
>
> Merci infiniment pour votre aide précieuse
> NS
>
>
> Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As
Long)
> Dim strData As String
> Dim strRemoteHost As String
>
> strRemoteHost = Winsock1(Index).RemoteHostIP
>
> Debug.Print strRemoteHost
>
> Winsock1(Index).GetData strData, vbString
> Debug.Print "Réception " & strData & " de la machine " & strRemoteHost
>
> End Sub
>
>
Merci Ouattara pour tno aide.
Je voie ce que tu peux dire mais a mon avis ceci est valable uniquement
les connexions TCP !!
Moi j'utilise UDP (mode non connecté) et donc pas de session ouverte et
pas de négociation de session... je veux dire par la que événement
"ConnectionRequest" ne exécute pas pour les connexions UDP.
Ais-je bien compris ce que tu voulais dire ?
Merci encore
NS
"Ouattara Inssoukira" a écrit dans le message de
news:%
> Salut
> Je crois que cela est normal, tel que le programme est écrit. En effet
> arrivées des data sur les winsock ne peuvent pas être synchronisées
parceque
> tu ne peux pas les prévoir.
>
> Essaies ceci :
> Crées plutot deux objets winsock : winsock1 et winsock2
> Mets à zéro l'index de winsock2
>
> Ton programme doit avoir un seul objet winsock pour écouter sur le port
> (winsock1)..
> Quand il y une demande de connexion (ConnectionRequest), tu dois
l'accepter
> sur un des winsock indexés winsock2..
>
> exemple :
>
> Ecoute du port sur winsock1 :
>
> sub form_load
> winsock1.localport = numero de port
> winsock1.listen
> end sub
>
> Acceptation de la connexion sur winsock2, créé dynamiquement par le
> programme :
>
> Private Sub Winsock1_ConnectionRequest( ByVal requestID As Long)
> Dim ws As Winsock
> Set ws = Winsock2(Winsock2.UBound + 1)
> Load ws
> ws.Accept requestID
> End Sub
>
> Private Sub Winsock2_DataArrival(Index As Integer, ByVal bytesTotal As
Long)
> Winsock2(Index).GetData donrec, vbString
> ...
> .....
> End Sub
>
> Tu pourras optimiser reprenant les objets winsock2 libérés suite à un
close
>
> "ns" a écrit dans le message de
> news:
> > Bonjour,
> >
> > Avec le control Winsock, je fais écouter un serveur sur un port en UDP
> (mode
> > non connecté).
> >
> > Je reçois une bonne quantité de flux provenant de plusieurs machines.
> > Exemple :
> > Réception "AAA" de la machine "192.168.0.1"
> > Réception "BBB" de la machine "192.168.0.2"
> > Réception "CCC" de la machine "192.168.0.3"
> >
> > Parfois, je reçois du flux d'une machine donnée pendant que la
> > "RemoteHostIP" du control Winsock me renvoie l'adresse d'une autre
> machine.
> > Comme ceci dans l'exemple :
> >
> > Réception "AAA" de la machine "192.168.0.2"
> > Pourtant c'est "192.168.0.1" qui a envoyée "AAA" et c'est certain.
> >
> > J'ai sans doute oublier quelque chose dans le paramètrage de Winsock
> UDP!
> >
> > Une partie de mon code ci-dessous. Le reste du code n'a aucun lien
> mon
> > control Winsock.
> >
> > Merci infiniment pour votre aide précieuse
> > NS
> >
> >
> > Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As
> Long)
> > Dim strData As String
> > Dim strRemoteHost As String
> >
> > strRemoteHost = Winsock1(Index).RemoteHostIP
> >
> > Debug.Print strRemoteHost
> >
> > Winsock1(Index).GetData strData, vbString
> > Debug.Print "Réception " & strData & " de la machine " & strRemoteHost
> >
> > End Sub
> >
> >
>
>
Merci Ouattara pour tno aide.
Je voie ce que tu peux dire mais a mon avis ceci est valable uniquement
les connexions TCP !!
Moi j'utilise UDP (mode non connecté) et donc pas de session ouverte et
pas de négociation de session... je veux dire par la que événement
"ConnectionRequest" ne exécute pas pour les connexions UDP.
Ais-je bien compris ce que tu voulais dire ?
Merci encore
NS
"Ouattara Inssoukira" <inssoukira@yahoo.fr> a écrit dans le message de
news:%23M0SXSAIFHA.1528@TK2MSFTNGP09.phx.gbl...
> Salut
> Je crois que cela est normal, tel que le programme est écrit. En effet
> arrivées des data sur les winsock ne peuvent pas être synchronisées
parceque
> tu ne peux pas les prévoir.
>
> Essaies ceci :
> Crées plutot deux objets winsock : winsock1 et winsock2
> Mets à zéro l'index de winsock2
>
> Ton programme doit avoir un seul objet winsock pour écouter sur le port
> (winsock1)..
> Quand il y une demande de connexion (ConnectionRequest), tu dois
l'accepter
> sur un des winsock indexés winsock2..
>
> exemple :
>
> Ecoute du port sur winsock1 :
>
> sub form_load
> winsock1.localport = numero de port
> winsock1.listen
> end sub
>
> Acceptation de la connexion sur winsock2, créé dynamiquement par le
> programme :
>
> Private Sub Winsock1_ConnectionRequest( ByVal requestID As Long)
> Dim ws As Winsock
> Set ws = Winsock2(Winsock2.UBound + 1)
> Load ws
> ws.Accept requestID
> End Sub
>
> Private Sub Winsock2_DataArrival(Index As Integer, ByVal bytesTotal As
Long)
> Winsock2(Index).GetData donrec, vbString
> ...
> .....
> End Sub
>
> Tu pourras optimiser reprenant les objets winsock2 libérés suite à un
close
>
> "ns" <ns@none.ns> a écrit dans le message de
> news:38o1jgF5dhs94U1@individual.net...
> > Bonjour,
> >
> > Avec le control Winsock, je fais écouter un serveur sur un port en UDP
> (mode
> > non connecté).
> >
> > Je reçois une bonne quantité de flux provenant de plusieurs machines.
> > Exemple :
> > Réception "AAA" de la machine "192.168.0.1"
> > Réception "BBB" de la machine "192.168.0.2"
> > Réception "CCC" de la machine "192.168.0.3"
> >
> > Parfois, je reçois du flux d'une machine donnée pendant que la
> > "RemoteHostIP" du control Winsock me renvoie l'adresse d'une autre
> machine.
> > Comme ceci dans l'exemple :
> >
> > Réception "AAA" de la machine "192.168.0.2"
> > Pourtant c'est "192.168.0.1" qui a envoyée "AAA" et c'est certain.
> >
> > J'ai sans doute oublier quelque chose dans le paramètrage de Winsock
> UDP!
> >
> > Une partie de mon code ci-dessous. Le reste du code n'a aucun lien
> mon
> > control Winsock.
> >
> > Merci infiniment pour votre aide précieuse
> > NS
> >
> >
> > Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As
> Long)
> > Dim strData As String
> > Dim strRemoteHost As String
> >
> > strRemoteHost = Winsock1(Index).RemoteHostIP
> >
> > Debug.Print strRemoteHost
> >
> > Winsock1(Index).GetData strData, vbString
> > Debug.Print "Réception " & strData & " de la machine " & strRemoteHost
> >
> > End Sub
> >
> >
>
>
Merci Ouattara pour tno aide.
Je voie ce que tu peux dire mais a mon avis ceci est valable uniquement
les connexions TCP !!
Moi j'utilise UDP (mode non connecté) et donc pas de session ouverte et
pas de négociation de session... je veux dire par la que événement
"ConnectionRequest" ne exécute pas pour les connexions UDP.
Ais-je bien compris ce que tu voulais dire ?
Merci encore
NS
"Ouattara Inssoukira" a écrit dans le message de
news:%
> Salut
> Je crois que cela est normal, tel que le programme est écrit. En effet
> arrivées des data sur les winsock ne peuvent pas être synchronisées
parceque
> tu ne peux pas les prévoir.
>
> Essaies ceci :
> Crées plutot deux objets winsock : winsock1 et winsock2
> Mets à zéro l'index de winsock2
>
> Ton programme doit avoir un seul objet winsock pour écouter sur le port
> (winsock1)..
> Quand il y une demande de connexion (ConnectionRequest), tu dois
l'accepter
> sur un des winsock indexés winsock2..
>
> exemple :
>
> Ecoute du port sur winsock1 :
>
> sub form_load
> winsock1.localport = numero de port
> winsock1.listen
> end sub
>
> Acceptation de la connexion sur winsock2, créé dynamiquement par le
> programme :
>
> Private Sub Winsock1_ConnectionRequest( ByVal requestID As Long)
> Dim ws As Winsock
> Set ws = Winsock2(Winsock2.UBound + 1)
> Load ws
> ws.Accept requestID
> End Sub
>
> Private Sub Winsock2_DataArrival(Index As Integer, ByVal bytesTotal As
Long)
> Winsock2(Index).GetData donrec, vbString
> ...
> .....
> End Sub
>
> Tu pourras optimiser reprenant les objets winsock2 libérés suite à un
close
>
> "ns" a écrit dans le message de
> news:
> > Bonjour,
> >
> > Avec le control Winsock, je fais écouter un serveur sur un port en UDP
> (mode
> > non connecté).
> >
> > Je reçois une bonne quantité de flux provenant de plusieurs machines.
> > Exemple :
> > Réception "AAA" de la machine "192.168.0.1"
> > Réception "BBB" de la machine "192.168.0.2"
> > Réception "CCC" de la machine "192.168.0.3"
> >
> > Parfois, je reçois du flux d'une machine donnée pendant que la
> > "RemoteHostIP" du control Winsock me renvoie l'adresse d'une autre
> machine.
> > Comme ceci dans l'exemple :
> >
> > Réception "AAA" de la machine "192.168.0.2"
> > Pourtant c'est "192.168.0.1" qui a envoyée "AAA" et c'est certain.
> >
> > J'ai sans doute oublier quelque chose dans le paramètrage de Winsock
> UDP!
> >
> > Une partie de mon code ci-dessous. Le reste du code n'a aucun lien
> mon
> > control Winsock.
> >
> > Merci infiniment pour votre aide précieuse
> > NS
> >
> >
> > Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As
> Long)
> > Dim strData As String
> > Dim strRemoteHost As String
> >
> > strRemoteHost = Winsock1(Index).RemoteHostIP
> >
> > Debug.Print strRemoteHost
> >
> > Winsock1(Index).GetData strData, vbString
> > Debug.Print "Réception " & strData & " de la machine " & strRemoteHost
> >
> > End Sub
> >
> >
>
>