Socket : Réindicer les index d'un groupe de controle de sockets (question à 100 [Résolu]

Signaler
Messages postés
23
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
19 octobre 2005
-
Messages postés
23
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
19 octobre 2005
-
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

6 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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)
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 152 internautes nous ont dit merci ce mois-ci

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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)
Messages postés
23
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
19 octobre 2005

Plus exactement, je fais un serveur de tchat gerant plusieurs connexions simultanées.

J'ai mon socket d'écoute sckTCP(0) qui créé un nouveau sckTCP(x) par incrément de 1 à chaque nouvelle tentative de connexion.

En meme temps, l'IP du client apparait dans une listbox



Vu que la listbox démarre à 0 =>

Indice du socket client = indice du client dans la listbox + 1



Si un client déconnecte, il est retiré de la listbox des connectés et les autres arrivés après perde 1 d'indice.

Donc l'idéal serait que l'indiçage des sockets suivent avec.


Sinon on m'as dis d'utiliser des collections plutot qu'un groupe de contrôle

Software Is Like Sex, It's Better When It's Free
Messages postés
23
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
19 octobre 2005

C'est parfait, merci de ton aide

Software Is Like Sex, It's Better When It's Free
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
... et ils sont où mes 100 points ?
Messages postés
23
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
19 octobre 2005

Il faut appeler un numéro Allopass

Software Is Like Sex, It's Better When It's Free