cs_snow_angel
Messages postés23Date d'inscriptionmardi 20 avril 2004StatutMembreDernière intervention19 octobre 2005
-
4 mars 2005 à 16:54
cs_snow_angel
Messages postés23Date d'inscriptionmardi 20 avril 2004StatutMembreDernière intervention19 octobre 2005
-
5 mars 2005 à 21:46
Bonjour,
Je cherche désespérément la solution pour réindicer un groupe de controle de socket après la fermeture de l'un d'eux.
Il est vrai qu'on peut aller jusqu'a un indice supérieur à 32 000 mais pour mon code j'ai besoin de décaler en cascade les index de mes sockets dans le groupe de controle.
Si j' unload socket(5) , le socket(6) doit devenir le socket(5), le 7 devenir le 6, etc
Si quelqu'un à la solution miracle ...
For i = 1 To intmax
If (sckTCP(i).State = 8) Then
sckTCP(i).Close
lst_clients.RemoveItem (i - 1)
Unload sckTCP(i)
End If
Next
Software Is Like Sex, It's Better When It's Free
A voir également:
Socket : Réindicer les index d'un groupe de controle de sockets (question à 100
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 5 mars 2005 à 00:45
Re
Tu prends le problème à l'envers : Ce n'est pas le ListBox qui est maitre, c'est la collection de Winsock, la ListBox doit s'adapter.
Pour réutiliser les WinSocks précédemment fermés, je t'ai dit comment faire.
Pour faire le lien entre un Winsock et un des éléments de ton ListBox, modifie ta manière de les mémoriser :
Remplace ton ListBox par un ListView simple (à une colonne) en mode Report.
Ce controle fonctionne pratiquement comme une ListBox, mais il a la possibilité de posséder -1- des SubItems (colonnes secondaires) -2- un Tag pour chaque ligne.
La gestion des SubItems n'étant plus compliquée que les Tags, je te conseille donc ces derniers : Dedans, tu pourras y stocker ... l'index du Winsock correspondant : Facile à écrire et à relire !
Vala
Jack
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 4 mars 2005 à 19:32
Salut
Non, tu ne peux pas réindicer sans risquer de perdre la comm avec tes clients.
La solution consiste à ne pas créer de nouveau WinSock à la suite, mais de réutiliser les WinSock qui ne servent plus.
Au moment ou tu t'apprêtes à faire un Load WinSock(xxx), fait ceci (à tester) :
Dim Trouvé As Long
Trouvé = 0
For r = 1 To UBound(WinSock)
If Not Winsock(r) Is Nothing Then
If WinSock(r).State <> sckConnected Then
Trouvé = r
Exit For
End If
End If
Next r
If Trouvé > 0 Then
' On réutilise celui là
Else
' Sinon, on en charge un tout neuf
Load WinSock(UBound(Winsock) + 1)
End If
Vala
Jack
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)