belette321
Messages postés100Date d'inscriptionsamedi 3 mai 2008StatutMembreDernière intervention 9 mars 2011
-
6 août 2008 à 22:39
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
7 août 2008 à 14:44
Voilla, j'aimerais savoir comment faire pour rendre mon sever winsock
accessible pour plusieur connection, car acctuelement si je depasse 1 connexion
le server et le client bug .. merci
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 6 août 2008 à 23:09
re,
utilise ton socket serveur en groupe de contrôles et lors de la tentative de connexoion, autorise (request) la connexion d'après le param (ID) sur un autre de ton groupe
en gros ton socket principal (0) ne communique jamais
voir la tonne d'exemples existants sur VbFrance
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 7 août 2008 à 03:32
1. localport est en lecture seule, ce que tu fais ici ne sert à rien
2. je te dis d'ouvir sur un autre socket, à créer dynamiquement. voir par exemple dans mes sources "URBI" mais le code n'est pas forcément évident
3. voir de toute façon les autres sources et les tutos !
4. évite le langage sms stp! non seulement c'est très chiant mais en plus en "dev", tout étant abrégé, c'est très facile de prendre un mot pour un autre...
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Vous n’avez pas trouvé la réponse que vous recherchez ?
belette321
Messages postés100Date d'inscriptionsamedi 3 mai 2008StatutMembreDernière intervention 9 mars 20111 7 août 2008 à 04:46
Trop dure pour moi ton votre URBI, je c'est qu'il est possible de
faire un multi client sur WinSock, j'ai une petit idee meme a quoi
pourais ressembler ce code mais quand je l'ai essailler, mais sa ne
marche pas ...
----------------------------------------------------------------------
_________________________
Dim loaderwin As String
_________________________
Private Sub Form_Load()
loaderwin = "0"
End Sub
________________________
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close
Winsock1.Accept requestID
loaderwin = CSng(loaderwin) + CSng(1)
Load Winsock1(loaderwin)
Winsock1(loaderwin).LocalPort = Port
Winsock1(loaderwin).Listen
End Sub
_________________________
----------------------------------------------------------------------
L'erreur que je retrouve est la suivante:
Wrong number or argumant or invalide property assiment
Cordialement, moi
P.S: Desoler pour l'orthographe le francais c'est pas mon truc
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 7 août 2008 à 08:05
Winsock1 est indexé ou pas ?
parce qu'en voyant le proto de ConnectionRequest, je dirai non (pas la propriété Index)
fais deux Sockets, si tu as du mal a voir la chose.
le premier, va faire un Listen, et attendra que les clients viennent.
lors du ConnectionRequest, si le socket 2 (appelons le Data) est libre (voir son State = sckClosed) on lui fais accepter la requete.
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Dim oSck As Winsock
For Each oSck In Winsock2
If oSck.State = sckClosed Then
Exit For
End If
Next oSck
If Nothing Is oSck Then
Load Winsock2(Winsock2.Count)
Set oSck = Winsock2(Winsock2.UBound)
End If
oSck.Accept requestID
End Sub
Ainsi, le socket principal reste disponible (Listen)
bonjourcheval
Messages postés228Date d'inscriptionmercredi 13 décembre 2000StatutMembreDernière intervention 8 août 2011 7 août 2008 à 14:10
Dans le lien que je t'ai envoyé, c'est expliqué très clairement avec des exemples simple... Voici une partie du code que j'ai Copier-Coller de la source.
Pour faire un projet qui peut être connecté à plusieurs Winsock en même
temps, faites-le avec 2 winsocks, l'un « Wck » avec la propriété «
Index » à 0
et l'autre « Serveur ».
Rajoutez la variable public (donc accessible de partout) « Nb », et initialisez la à 0 au form_load.
Selon
ce qu'on vient de voir, faites en sorte (et ça paraît logique) que ce
soit « Serveur » qui soit serveur donc qui écoute mais pour son
évenement ConnectionRequest mettez :
§ Private Sub Serveur_ConnectionRequest(ByVal requestID As Long)
§ Nb=Nb+1
§ Load Wck(Nb)
§ Wck(Nb).Accept requestID
§ End Sub
Vous
avez compris !!! A chaque demande
de connexion à votre appli, elle
charge un nouveau contrôle Winsock
« Wck » qui va prendre la demande et
donc se connecter a l'appli appelante : au final, si 25 ctrl cherchent
à vous appelez, vous pourrez vous connecter aux 25 et communiquer avec
les 25 ! Ou plus ! (ou moins aussi).
Le ctrl Winsock « Serveur » lui reste TOUJOURS A L'ECOUTE PRET A TRAITER LES EVENTUELLES DEMANDES.
Et pour faire propre, il faut pas oublier :
§ Private Sub Wck_Close(Index As Integer)
§ Unload Wck(Index)
§ If Wck.count=0 then Nb=0
§ End Sub
Ce
qui permet de décharger de la mémoire les ctrl winsock auxquel leur
correspondant ont lâché la communication, et qui donc ne servent plus.
Comment traiter différentes réceptions ou la gestion des ordres :
Souvent
vos applis vont s'envoyer des infos, mais pas tjrs les mêmes : donc
comment faire pour que le prog distingue s'il vient de recevoir le
Pseudo du type ou bien un message qu'il vient d'envoyer pour afficher
dans le chat ? Simple encore une fois !!!
Faites correspondre chaque type de données (je ne parle pas du type VB) à un caractère puis faites par exemple :
pour l'envoi d'un pseudo :
§ .senddata « P » & VarPseudo
pour l'envoi d'un msg :
§ .senddata « M » & VarMsg
et pour la réception, on distingue comme ça :
§ Dim data as string
§ Dim Ordre as string * 1
§ .getdata data
§ Ordre = left(data,1) 'récupère dans Ordre le 1er caractère
§ data = right(data,len(data)-1) 'retire ce 1er caractère de data
§ Select case Ordre 'faites ici différents usages des données
§ Case « P »
§ Pseudo = data
§ Case « M »
§ Text1.text = data
§ End Select
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 7 août 2008 à 14:18
§ Private Sub Wck_Close(Index As Integer)
§ Unload Wck(Index)
§ If Wck.count=0 then Nb=0
§ End Sub
gaffe a ne pas tenter de decharger le socket d'index 0
Nb ne sert pas a grand chose, si ?
perso, je ferai :
Private Sub Wck_Close(Index As Integer)
If Index = Wck.UBound And Index<>0 Then
Unload Wck(Index)
End If
End Sub
ca supprime les sockets en partant du dernier, si possible...
au pire, on réutilise les sockets constament, donc pas de soucis reel de consommation de mémoire du fait de ces controles dynamiques
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 7 août 2008 à 14:44
çà fera "boom" ^^
contrôle inexistant.
le 0 sert de modèle pour les autres chargements dynamiques
(NB : désolé d'insister mais mon urbi...., à défaut de servir niveau code alors, est aussi utilisable ASIS. il gère seul son autogénération dynamique. il y aura juste 2 data inutiles "[Int:Str] ")
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp