Soyez le premier à donner votre avis sur cette source.
Snippet vu 6 124 fois - Téléchargée 39 fois
'1- vous devez mettre sa dans la feuille où il y a le contrôle winsock Private pile As New Collection private rendu as long Public Sub Vider_Pile() Set pile = New Collection End Sub '2- créer un Timer, donné la valeur 1 à la propriété interval et méttez sa dans 'son evenement Timer : dim encour as long If pile.Count = 0 Then Else If pret = False Then rendu=rendu+1 encour=rendu socket.SendData pile.Item(encour) pile.Remove encour rendu=rendu-1 End If End If '3- dans votre controle winsock, dans l'evenement send complete marquez ca pret = False '4-dans ce meme controle winsock, dans l'évenement sendprogress marquez sa pret = True '5- quand vous devez envoyer des données marquez sa à la place 'de .senddata pile.Add "Données"
31 mars 2005 à 15:51
J'ai des messages qui se concatènes qd mm mais pas systématiquement :( Donc ce n'est pas une solution fiable.
C'est qd mm incroyable qu'il n'y ait pas de moyen de faire ça sans renvoyé un message du serveur!
29 mars 2005 à 16:03
29 mars 2005 à 15:31
Ca à l'air pas mal, mais ça manque de commentaires explicatif, de ce fait, je n'arrive pas à m'en servir.
Quand doit on se servir de la fonction vider_Pile?
Qd je fais Pile.Add "données" à la place de SendData, il y a une erreur qui me dit Object Required...
Quand tu dis, éviter que les paquets se mélangent, ça veut dire quoi? Parce que moi les paquets se concatènent si je les envoi à la suite, et j'aimerais qu'ils me les envoi un par un, est-ce ta source sert à faire ça? Merci répondre.
26 sept. 2003 à 00:13
tu fais un truc du genre
sck1 et sck 2 = controles winsock
sck1.listen
sub sck1_connectionrequest(byval id as long)
sck2.accept id
end sub
c'est sck1 qui recoi la demande de connection mais c'est sck2 qui l'accepte
et dans ton exemple, tu utilise une collection de winsock plutot qu'un nombre predefini (ca je le savais)
la ou je bloquais, c'est que je croyais que c'etais le winsock qui recevais le connectionrequest qui devais accepter l'IDRequest
mais si je peux l'accepter par un autre winsock ... ca deviens beaucoup + simple !
25 sept. 2003 à 10:16
pour gérer ton pb, tu crée un objet winsock ds ta classe
private withevents sock as new winsock
exemple d un serveur d authentification
....
m_type = srvIdent
sock.close
sock.Bind port, ip (on peur binder l IP de son choix en case de plusieurs IP)
sock.Listen
...
et tu passes le request ID a la classe qui va gérer ca.( ici c un exemple d un serveur multi tache)
Private Sub sock_ConnectionRequest(ByVal requestID As Long)
'***Procédure de traitement des requetes de connexion****
Dim t As Object
If mycol.Count < Maxclients Then
nb = nb + 1
Select Case m_type
'//serveur d identification
Case srvIdent:
Set t = New CServeurLogin
mycol.Add t, Hex(t.ServeurIDent)
t.AffectSocket requestID, Me, timeout, m_msgA, m_filtre
'//serveur de messagerie
Case srvChat:
'//serveur de recherche
Case srvFinder:
'//serveur de fichiers
Case srvBrowser:
Set t = New CServeurBrowser
mycol.Add t, Hex(t.ServeurIDent)
t.AffectSocket requestID, Me, timeout
End Select
End If
Set t = Nothing
End Sub
et dans la classe CserveurLogin
un autre object withevents sock
Public Sub AffectSocket(sID As Long, srv As CServeur, Optional sTimeOut As Long 4000, Optional msg As String, Optional filtreparts As Boolean True)
Dim flag As Boolean
If sock.State <> sckClosed Then sock.Close
sock.Accept sID
....
end sub
un port a l'écoute peut accepter un nbre presque illimité de clients à condition d opter pour un système multithreads. La destruction de la collection ou de l objet via la classe principal impose la fermeture du port.
j obtiens des performences très intéressantes avec ce procédé.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.