ASYNC TCP SOCKET

Messages postés
206
Date d'inscription
mercredi 30 janvier 2002
Statut
Membre
Dernière intervention
4 décembre 2007
- - Dernière réponse : Clecle0401
Messages postés
21
Date d'inscription
samedi 14 septembre 2002
Statut
Membre
Dernière intervention
10 juin 2009
- 22 oct. 2008 à 20:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40792-async-tcp-socket

Afficher la suite 
leptidev
Messages postés
206
Date d'inscription
mercredi 30 janvier 2002
Statut
Membre
Dernière intervention
4 décembre 2007
-
Code parfait, bref et très concret, manque un peu de commentaire peut etre sur le côté asynchrone !

Bon travail et merci j'ai enfin pu faire marcher ce *** de composant ...
tassali
Messages postés
6
Date d'inscription
mercredi 30 mai 2007
Statut
Membre
Dernière intervention
27 mai 2008
-
super j'ai testé ce code et il marche à merveille
je voudrais savoir comment faire la meme chose en UDP
aKheNathOn
Messages postés
285
Date d'inscription
dimanche 22 juillet 2001
Statut
Modérateur
Dernière intervention
5 décembre 2013
-
J'ai un message d'erreur sur l'événement DataArrival :
Opération inter-threads non valide : le contrôle 'logs' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.

Sous Visual 2005 - saurais-tu d'où ça vient ?

Merci d'avance.
psykocrash
Messages postés
244
Date d'inscription
vendredi 14 juin 2002
Statut
Membre
Dernière intervention
17 mars 2009
-
C'est un problème connu. En fait l'évènement DataArrival est déclanché par un callback. Ce callback est un thread différent du thread qui gère ton interface, ta form. Par mesure de sécurité, il est interdit à un thread d'exécuter du code dans un autre, d'où l'erreur que tu as.

De ce que j'ai lu sur Internet, il faut utiliser des delegate. J'ai donc mis à jour mon code en les intégrant mais ça ne fonctionne pas (c'est pour ça que j'ai pas mis la MAJ ici). Y'a bien ce code b@z socket qui a trouvé un moyen de finter ça et les gens semblent contents de ce code, mais je l'ai trouvé un peu trop chaotique, trop complexe pour l'usage auquel il est destiné si tu veux. Je continue donc à chercher une meilleur solution.

Si quelqu'un sait comment résoudre ce problème, je suis intéressé.
Clecle0401
Messages postés
21
Date d'inscription
samedi 14 septembre 2002
Statut
Membre
Dernière intervention
10 juin 2009
-
Comment, par exemple, faire un retour à la console quand l'évènement Connected est appelé ?
werdDomain
Messages postés
61
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
1 novembre 2011
-
bon, je ne sait si le probleme est résolut, mais je peut vous éclairé a propos des "Delegate" ...
Il est possible, avec un Delegate, de faire une opperation Inter-Thread en règle :P
voici comment :

'on crée un sub ...
private sub MONSUB(str as string)

end sub

'on declare notre "Delegate" :
private Delegate sub MonDelegate(Str as string)
'On crée une instance de ce delegate et on le refere a MONSUB
dim DelegateInstance as new MonDelegate(AdressOf MONSUB)
'on declare un sub "Public" sur le form :
public sub Action(Str as string)
'on vérifie que l'Invoke est aubligatoire
if InvokeRequired then
'on invoke le Delegate a avec le thread du form(ME)
ME.invoke(DelegateInstance, new object() {str})
else
DelegateInstance(str)
end if
end sub

donc, pour résumé... Quand on feras appele au sub "Action()" a partir d'un autre thread que le form, il vas invoker le "Delegate" a partir du thread du form.
Invoke, c'est comme si on demenderais au Thread qui a crée le form, d'executer ce sub a la place de l'autre thread.
De cette façon, vous n'obtienderez plus d'erreur
"Opperation Inter-Thread invalide" ou
"impocible d'acceder au controle a partir d'un thread autre que celui qu'il la crée"
Redman31100
Messages postés
167
Date d'inscription
mardi 11 septembre 2007
Statut
Membre
Dernière intervention
11 février 2009
-
Souvent il dit "Hote inconnu" alors que je met une adresse HTTP et port 125

Et quand je met une IP il met adresse non compatible avec le protocole.

Je trouve pas ça normal.
Redman31100
Messages postés
167
Date d'inscription
mardi 11 septembre 2007
Statut
Membre
Dernière intervention
11 février 2009
-
J'ai trouvé l'erreur : T'a utiliser Resolve de DNS j'ai remplacé par Net.IPAddress.Parse(Hostname)
Redman31100
Messages postés
167
Date d'inscription
mardi 11 septembre 2007
Statut
Membre
Dernière intervention
11 février 2009
-
J'ai toujours cette erreur, même sur une IP d'un pote avec le port MSN :

Une requête d'envoi ou de réception de données n'a pas été autorisée car le socket n'est pas connecté et (lors de l'envoi sur un socket datagramme en utilisant un appel sendto) aucune adresse n'a été fournie.

SocketError : NotConnected
Redman31100
Messages postés
167
Date d'inscription
mardi 11 septembre 2007
Statut
Membre
Dernière intervention
11 février 2009
-
J'ai trouvé je fais connect et de suite send, mais EndConnect entre les 2 n'a pas été exécuté donc je dois faire Send dans l'évenement connected.
Clecle0401
Messages postés
21
Date d'inscription
samedi 14 septembre 2002
Statut
Membre
Dernière intervention
10 juin 2009
-
Comment, par exemple, faire un retour à la console quand l'évènement Connected est appelé ?
Redman31100
Messages postés
167
Date d'inscription
mardi 11 septembre 2007
Statut
Membre
Dernière intervention
11 février 2009
-
Comment ça faire un retour à la console ?
Clecle0401
Messages postés
21
Date d'inscription
samedi 14 septembre 2002
Statut
Membre
Dernière intervention
10 juin 2009
-
Je ne sais pas, inscrire quelque chose, afficher un message, appeler une fonction etc..

Quelque chose qui me prouve par exemple que je suis bien connecté :)