flagyg
Messages postés50Date d'inscriptionsamedi 1 septembre 2001StatutMembreDernière intervention20 septembre 2006
-
16 févr. 2003 à 21:18
damienvi
Messages postés5Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention 1 avril 2004
-
1 avril 2004 à 21:06
Bonjours à tous,
J'utilise une variable avec événements winsock (private withevents d as mswinsck.winsock)dans un module de classe.
Le problème c'est que quand j'appelle une fonction dans le module de classe(pour connecter le winsock par exemple)dès que le code de la fonction à été éxécuté,le module est quitté et le winsock détruit.Je ne peux donc pas savoir si la connexion à réussie et si des données ont étés reçues.Je dois donc mettre une boucle sans fin à la suite de la fonction pour que les événements puissent êtrent appelés et pour que le winsock ne soit pas détruit.Est-ce possible de faire autrement qu'une boucle sans fin pour garder le même socket tout le temps???
damienvi
Messages postés5Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention 1 avril 2004 1 avril 2004 à 21:06
Bonjour flagyg,
j'ai vu que tu avais fais des remarques sur les api windows winsock, j'espère que tu pouras m'aider ( si tu as un peu de temps)
Je pose le décor : je veux faire de la communication entre un PC et un automate sous une couche TCP IP.
Pour ce faire, j'utilise l'API de windows (wsock32.dll) car je ne veux pas utiliser le contrôle winsock OCX, j'ai bien compris qu'il fallait :
1) initialiser la dll avec
Declare Function WSAStartup Lib "wsock32" _
(ByVal wVersionRequired As Integer, _
wsData As WSA_DATA) As Long
2) créer le socket avec
Declare Function Socket Lib "wsock32.dll" Alias "socket" _
(ByVal afinet As Integer, _
ByVal socktype As Integer, _
ByVal protocol As Integer) As Long
3) connecter le socket avec
Declare Function connect Lib "wsock32" _
(ByVal sock As Long, _
name As SOCK_ADDR, _
ByVal namelen As Integer) As Long
4) Envoyer un message sur le pc distant avec
Declare Function send Lib "wsock32" _
(ByVal sock As Long, _
buffer As Any, _
ByVal length As Long, _
ByVal flags As Long) As Long
Mais c'est maintenant que ça se complique, car avec le "client" crée ci dessus, je voudrais créer un évènement lors d'une réception d'un message par le serveur sur lequel je suis connecté.
Je crois avoir compris (mais là, je suis moins sur) que :
1) on peut analyser les évènemtns qui affectent un socket avec :
Declare Function WSAAsyncSelect Lib "wsock32.dll" _
(ByVal sock As Long, _
ByVal hwnd As Long, _
ByVal wMsg As Integer, _
ByVal lEvent As Long) As Integer
mais je ne sais pas trop m'en servir, à cause de hwnd.
2) on lit le message du socket reçu avec :
Declare Function recv Lib "wsock32" _
(ByVal sock As Long, _
buffer As Any, _
ByVal length As Long, _
ByVal flags As Long) As Long
Mon problème est donc le suivant :
comment avoir un évènement (du type "Data_arrival" du contrôle winsock) qui me réveille afin que je puisse utiliser ma fonction recv pour lire dans mon socket.
Merci pour le Share ;)
Je suis automaticien et pas informaticien, soyez indulgent ;)