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

Résolu
cs_snow_angel Messages postés 23 Date d'inscription mardi 20 avril 2004 Statut Membre Dernière intervention 19 octobre 2005 - 4 mars 2005 à 16:54
cs_snow_angel Messages postés 23 Date d'inscription mardi 20 avril 2004 Statut Membre Dernière intervention 19 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:

6 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
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)
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
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)
0
cs_snow_angel Messages postés 23 Date d'inscription mardi 20 avril 2004 Statut Membre Dernière intervention 19 octobre 2005
4 mars 2005 à 19:49
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
0
cs_snow_angel Messages postés 23 Date d'inscription mardi 20 avril 2004 Statut Membre Dernière intervention 19 octobre 2005
5 mars 2005 à 02:21
C'est parfait, merci de ton aide

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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
5 mars 2005 à 16:31
... et ils sont où mes 100 points ?
0
cs_snow_angel Messages postés 23 Date d'inscription mardi 20 avril 2004 Statut Membre Dernière intervention 19 octobre 2005
5 mars 2005 à 21:46
Il faut appeler un numéro Allopass

Software Is Like Sex, It's Better When It's Free
0
Rejoignez-nous