Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 2 sept. 2009 à 21:50
Je pense pas qu'elle soit très adaptée au mode console, le plus simple serait d'utiliser les classes Socket, TcpServer ou TcpClient du framework. Qu'est ce que tu veux faire en gros?
hussein47
Messages postés3Date d'inscriptionmardi 10 février 2009StatutMembreDernière intervention 2 septembre 2009 2 sept. 2009 à 21:40
Y aurai 'il moyen d'utiliser ta classe en mode console, tu peut me montrer un exemple sil te plait, je suis débutant...
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 31 août 2009 à 14:34
Bonjour,
Merci! Et c'est marrant parce qu'en ce moment je suis aussi en train de bosser avec des sockets, mais non bloquants (sous Linux) et avec Python.
Pour être honnête ça fait des années que j'ai pas touché au code et que j'ai pas programmé en VB.NET donc je suis pas sûr d'être d'une grande aide pour trouver le bug.
Mais pour essayer, est ce que les données sont bien envoyées? Est ce que si tu mets un point d'arrêt sur '_socket.Send(data, ...)' dans AutoSocket.Send() il passe dessus? Et sur la ligne 'RaiseEvent DataDeparture' ?
Kardyne
Messages postés1Date d'inscriptionmercredi 24 décembre 2008StatutMembreDernière intervention31 août 2009 31 août 2009 à 11:38
Bonjour,
Premièrement, je tiens à dire que ce code est vraiment super !
Ensuite, j'ai un petit problème avec les évènements DataDeparture et SendComplete. L'évènement ne se déclenche pas.
J'ai cherché dans le code de la classe d'où pourrait venir l'erreur, mais sans succès.
Voila, voila...
Merci d'avance.
Kardyne.
Xiu
Messages postés13Date d'inscriptionmercredi 28 juin 2006StatutMembreDernière intervention21 juillet 2009 21 juil. 2009 à 12:42
Salut,
Comment mettre dans une variable les données d'un socket precis ?
merci
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 29 avril 2009 à 18:28
C'est vrai que les classes de Socket de .NET sont pas pratiques à utiliser avec Windows Forms, parce qu'elle ont été pensées pour être utilisée dans une partie client ou serveur de l'application, et non pas mélangée à la présentation (Forms).
Donc d'un côté c'est moins pratique, mais ça force à bien réfléchir à l'architecture de l'application, le flux de données, les threads, etc. Perso c'est quelque chose que j'adore et que je trouve hyper intéressant, mais ça demande pas mal de temps et de recherches.
Par exemple c'est pas une bonne chose d'appeler des fonctions blocantes (synchrones) sur le thread de l'interface graphique, puisque ça fait freezer l'affichage de tes fenêtres. C'est pour ça que le plus simple c'est d'avoir un thread dédié à ton socket. L'alternative c'est d'utiliser les fonctions asynchrones ou des événements mais c'est plus difficile à bien structurer, enfin c'est mon point de vue.
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 29 avril 2009 à 15:21
Hi, ben en fait j'ai laissé de coté .Net durant quelque années je m'obstinai à vouloir resté sur vb6 mais arrive un moment ou on est bien obligé de suivre...
Bref je m'y suis mi et je ne le regrette pas, mais je regrette for mon Mswinsck.ocx... ce bon vieux winsock était si facile d'utilisation...
Je trouve franchement la classe system.Net.Socket très mal faite, j'ai même trouvé des exemple de code socket avec des fonctions non synchrones et des timers !
En ce qui concerne ton code il sera toujours utile jusqu'à modification par MS de System.Net.Socket...
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 29 avril 2009 à 14:57
Pas de soucis :)
Ce qui m'étonne un peu c'est que ce bout de code soit toujours utile et utilisé, même 5 ans après que je l'ai écrit !
A+
Xya
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 29 avril 2009 à 14:36
Ok, ok !
Merci bien pour toutes ces informations heureusement qu'il y a encore des gens pour partager leur savoir et filer un coup de main sans attendre des choses en retour :) (ce qui fait que le développement évolu plus vite que certaine personnes ou choses de la vie...)
Merci encore @+
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 29 avril 2009 à 14:27
Tu peux utiliser n'importe quel contrôle comme SynchronizingObject.
Par exemple imaginons que tu crées le socket dans le constructeur de ta form:
Public Sub New()
'...
Me.socket = New AutoSocket()
Me.socket.SynchronizingObject = Me
End Sub
et après dans tes gestionnaires d'événements t'as plus à te soucier de Invoke/BeginInvoke (cad les événements sont automatiquement exécutŽs dans le thread principal):
Private sub Control_Disconnect (sender as Object, e as System.EventArgs) Handles Control.Disconnect
'Je veu par exemple afficher "déconnecté" dans un label
label.Text = "Déconnecté"
End sub
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 29 avril 2009 à 13:18
Heuu... au fait, qu'est ce qui défini la valeur de "syncObj" c'est tout la le problème ?
Car si on gère le code normalement au niveau du formulaire on n'a qu'a faire :
Private sub Control_Disconnect (sender as Object, e as System.EventArgs) Handles Control.Disconnect
'Je veu par exemple afficher "déconnecté" dans un label
If (Label.InvokeRequired) Then
Label.Invoke(New DelegSub(AddressOf e_Connexion), Sender, e)
Else
Label.Text = "Déconnecté"
End If
End sub
Et la on obtient l'état de l'objet de synchronisation du label, mais dans le cas ou le code est géré par ma classe comment transmettre ce paramètre à "syncObj" ???
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 29 avril 2009 à 12:57
Hééé ! Bien vu !
Je vais tester ca de suite, encore Merci ;)
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 29 avril 2009 à 12:44
L'idé c'est de rajouter une propriété à la classe:
Protected syncObj As ISynchronizeInvoke 'objet de synchronisation Windows Forms
Public Property SynchronizingObject() As ISynchronizeInvoke
Get
Return syncObj
End Get
Set(ByVal Value As ISynchronizeInvoke)
syncObj = Value
End Set
End Property
Pour chaque événment tu dois ajouter une méthode OnXXX qui détermine si on doit utiliser BeginInvoke ou pas:
Public Event Disconnected(ByVal sender As Object, ByVal e As EventArgs)
Protected Overridable Sub OnDisconnected(ByVal e As EventArgs)
If Not syncObj Is Nothing AndAlso syncObj.InvokeRequired Then
Dim deleg As New EventHandler(AddressOf SyncDisconnected)
syncObj.BeginInvoke(deleg, New Object() {Me, e})
Else
SyncDisconnected(sender, e)
End If
End Sub
Et une øéthode SyncXXX qui déclenche juste l'événement:
Protected Sub SyncDisconnected(ByVal sender As Object, ByVal e As EventArgs)
RaiseEvent Disconnected(sender, e)
End Sub
La version VB.NET est un peu lourde, comme je pense pas qu'on puisse récupérer le délégué de l'événement contrairement à C#, sinon on pourrait faire (dans OnXXX):
syncObj.BeginInvoke(Me._delegue_Disconnected, New Object() {Me, e})
et se passer de SyncXXX.
Pas de soucis :p J'espère que ca te øettra sur la voie.
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 29 avril 2009 à 11:48
je pense que tu as entièrement raison d'ailleurs aurais-tu une idée ou une ressource pour implémenter ISynchronizeInvoke ?
Je suis en train de faire une classe de dialogue TCP avec un protocole intégré et des fonctions qui utilise les sockets.
Cette classe permettra entre autre de gérer les connexions Client/serveur, l'envoi de message simplifié avec paramètres et gèrera directement l'envoi de fichier avec événements (Start, Finish, Progress...).
J'aimerais pourvoir faire des événements (un peut comme dans ta classe), en ce qui concerne les sockets sans avoir à chaque fois à appeler BeginInvoke/Invoke... :/
J'ai recherché partout mais j'ai pas trouvé grand chose, de plus je ne suis pas un expert en ce qui concerne le multithreading.
ET Merci pour ta disponibilité :p
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 29 avril 2009 à 08:29
Pt'être que pour des raisons de performances cette règle n'est vérifiée que quand tu lance ton programme dans un débogueur comme Visual Studio? De toute qu'elle soit vérifiée ou pas vaut mieux la suivre, ssurtout pour une appli réseau. Je me souviens avoir eu des bugs vraiment bizarre/aléatoires quand je le faisais pas
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 29 avril 2009 à 08:20
Merci pour ces commentaires détaillés ;)
J'ai pu trouver quelques explications en faisant des recherches hier,
Par contre... c'est bizard car quand je démarre le programme compilé ça fonctionne ?
l'exception n'est pas prise en compte ???
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 29 avril 2009 à 00:24
Si je me souviens bien (j'ai écrit ce code y'a 5 ans quand même :p et pas le courage de le télécharger et de le regarder), le socket doit utiliser un thread d'arrière plan pour gérer les différents événements.
Le problème, c'est que tout les contrôle windows forms (namespace System.Windows.Forms.*) doivent être impérativement utilisés sur le thread principal (c'est à dire tout code qui accède à leur méthodes et propriétés). Il n'y avait aucune vérification dans le Framework 1.1, par contre je crois que c'est à partir du 2.0 que cette "règle est vérifiée", et si elle n'est pas respectée, tu obtiens l'exception que tu as copié-collé.
La solution la plus rapide, c'est d'appeller BeginInvoke/Invoke dans tous les événements du socket, de sorte à exécuter le code qui accède à Windows Forms dans le thread principal. Exemple:
Private Sub socket_DataArrival( sender As Object, data As Byte() )
Me.BeginInvoke(ma_fonction_windows_forms, New Object[] {data}) ' synatxe VB?
End Sub
Private Sub ma_fonction_windows_forms(data As Byte())
txtClientInput.Text = Encoding.UTF8.GetString(data)
End Sub
Ca fait des années que j'ai pas fait de VB.NET (et pas de compilateur sous la main), donc je me souviens plus de la syntaxe, surtout pour la création de tableau et le passage du délégué (voir commentaire).
L'idée c'est tu passe un délégué de ta fonction (ici ma_fonction_windows_forms) comme 1er paramètre, et un tableau contenant la liste des paramètres de ta fonction comme 2ième paramètre. Ca c'est la solution rapide, bête et méchante, et pas hyper propre.
La solution plus "clean" serait de rajouter une propriété SynchronizingObject (de type ISrynchronizeInvoke -- interface implémentée par tous les contrôles Windows Forms) à la classe de Socket. Ensuite tu dois utiliser la méthode BeginInvoke de ton objet SynchronizingObject pour déclencher les événements.
Je pense qu'avec ça tu dois avoir pas mal de pistes pour régler le problème (je pense que tu devrais trouver sur le net le code pour utiliser BeginInvoke/Invoke et les événements VB.NET). J'espère que ça t'aidera!
Greetings from Norway
Xya
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 28 avril 2009 à 23:18
Une petite erreur à la connexion...
Opération inter-threads non valide : le contrôle 'txtClientInput' a fait l'objet
d'un accès à partir d'un thread autre
que celui sur lequel il a été créé.
Suis-je le seul à qui cette erreur est survenue ?
terbeh
Messages postés1Date d'inscriptionjeudi 12 avril 2007StatutMembreDernière intervention26 février 2008 26 févr. 2008 à 17:28
Bonjour, je suis débutant et ton code m'intéresse vraiment. Par contre je n'arrive pas à démarrer le serveur. Il reste toujours en état "Déconnecté". Je souhaite que tu m'aide avec un peu plus de commentaire dans le code.
Merci
FLLM
Messages postés4Date d'inscriptionvendredi 20 juillet 2007StatutMembreDernière intervention 3 novembre 2007 8 sept. 2007 à 23:28
J'ai pas testé mais l'idée est génial et rien que pour sa tu mérite un 10 !
Merci bcp sa va me débloquer dans un de mes projets !!
VPNVB
Messages postés58Date d'inscriptiondimanche 7 août 2005StatutMembreDernière intervention20 août 2008 8 sept. 2007 à 14:23
Salut
C'est un Source tré tré util
merci pour la Class !
Je souaite développer un Serveur SMTP, IMAP et POP3
S'a peux M'aider ?
Merci de Me Contacter par Email ou Directe...
kamikazlolo
Messages postés1Date d'inscriptionjeudi 6 mars 2003StatutMembreDernière intervention11 juillet 2006 11 juil. 2006 à 19:09
Marche tres bien pour le TCP, mais tu as testé pour l'UDP ?
Dans tous les cas TCP ou UDP, tu l'instancie la socket avec cette commande :
_socket = New Socket(af, SocketType.Stream, prot)
SocketType.Stream pour de l'UDP -> plantage
Mais sinon vraiment tres pratique comme appli, bravo ;)
psycho81
Messages postés84Date d'inscriptionmardi 4 mai 2004StatutMembreDernière intervention17 février 2008 16 mars 2006 à 08:14
Bonjour,
Je vous explique mon problème. Je souhaite faire un peer2peer privé. Donc arriver à joindre directement une personne sur internet via son ip pour lu itransmettre des paquets. jusque la, rien de bien difficile. Si bien sur les 2 clients sont les passerelles internet.
Supposons maintenant un reseau X1 ou il y a les ordinateur A1, B1 et C1 et A1 est la passerelle.
Supposons aussi un reseau X2 ou il y a les ordinateur A2, B2 et C2 et A2 est la passerelle.
Comment faire pour que C2 puisse directement communiquer avec C (ou B1) sans faire de serveur sur A1 ou A2.
Car mon application marche que de passerelle à passerelle. J'ai essayé le multicast par desespoir mais celà ne apsse pas dans Internet.
Si vous pouviez m'aiguiller dans mon problème par un bout de code .... j'en serai plus que ravi !
Bernard
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 19 févr. 2006 à 23:42
J'arrive pas à avoir la bonne FrameWork 2.0 moi j'ai la FrameWork 2.0 Bêta et ca marche pas.
Redman
Sebounet69
Messages postés1Date d'inscriptionmardi 8 novembre 2005StatutMembreDernière intervention 1 février 2006 1 févr. 2006 à 17:09
Je dois faire un chat en VB et je désire utiliser les sockets... Il faut que kje le fasse le plus rapidement possible... Est ce que le code est bien commenté histoire que je comprenne comment ça marche et comment on l'utilise... Et est-ce que vous connaissez des adresses qui explique correctement les sockets.
Merci d'avance
Salutations
casnic
Messages postés11Date d'inscriptionmardi 12 octobre 2004StatutMembreDernière intervention 3 janvier 2012 17 janv. 2006 à 08:21
Enfin de compte l'erreur se produit encore même si beaucoup plus rarement.
Aurais-tu une idée ?
Merci encore ...
casnic
Messages postés11Date d'inscriptionmardi 12 octobre 2004StatutMembreDernière intervention 3 janvier 2012 16 janv. 2006 à 09:36
Merci, ça fonctionne nickel !!!
par contre j'ai du placer cette boucle dans la boucle suivante. Sinon l'erreur se produisait encore de temps en temps.
Merci pour ton aide précieuse !
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 13 janv. 2006 à 12:51
Une petite correction, dans la ligne While ... Socket.Poll, il faut remplacer '!' par 'Not ', petite erreur de conversion VB.NET de ma part :)
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 13 janv. 2006 à 12:49
Cela fait un bout de temps que je n'ai pas mis à jour cette source, comme la version actuelle est en C# où cette erreur est corrigé !
Voilà le code à rajouter dans AutoSocket.Send:
Dim bytesLeft As Integer = data.Length
Dim sendTotalBytes As Integer = data.Length
Dim sendCurrentBytes As Integer = 0
'<==== Code à rajouter
'attend que le socket soit prêt, il se peut que le buffer d'envoi
'soit plein, ce qui lève une exception puisque le socket n'est pas bloquant
While !Socket.Poll(0, SelectMode.Write)
System.Threading.Thread.Sleep(0)
End While
' Code à rajouter ====>
While bytesLeft > 0
casnic
Messages postés11Date d'inscriptionmardi 12 octobre 2004StatutMembreDernière intervention 3 janvier 2012 12 janv. 2006 à 12:12
Très bon boulot, merci !
Ce code m'a permis de faire un bon dans l'avancement de mon projet. Par contre, l'erreur suivante se produit de temps en temps lorsque j'appelle la méthode Send de ta classe AutoSocket :
"System.InvalidOperationException : Impossible de bloquer un appel sur ce socket, pendant qu'un appel asynchrone antérieur est en cours."
Pour le moment mon application n'envoie qu'une seule trame, mais en reçois plusieurs.
Mes connaissances dans les Socket étant limitées pour l'instant, j'aimerais que tu m'aides à ce sujet.
Merci pour ton aide !
COlive
Messages postés91Date d'inscriptionmercredi 27 février 2002StatutMembreDernière intervention 3 décembre 2011 2 janv. 2006 à 13:03
Très bonne source.
Je suis depuis peu sous VB 2005 et le framework 2. J'essaie en vain, de réaliser un composant similaire en utilisant les classes suivnates : TcpListener, TcpClient et BackGroundWorker.
Malheureusement, mes compétences dans le domaines des sockets (TcpListener, TcpClient étant des dérivées) sont limitées et font que je n'y arrive pas. (Héhé on peut tout savoir faire non plus.)
Ton code est très bien fait, et devrait m'en apprendre beaucoup.
Il faut continuer !!!
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 14 oct. 2005 à 21:35
Beau travail ! Félicitations ! 10/10
Cela me servira beaucoup ! Merci !
Bonne continuation !
cs_dragon
Messages postés2336Date d'inscriptionsamedi 14 juillet 2001StatutMembreDernière intervention 5 mai 20096 25 avril 2005 à 18:22
c'est beau j'ai trouvé, c'était le localhot du serveur qui devait être changer pour l'IP
je comprend pas trop pourquoi, puisque c'est lui le serveur, mais bon.
cs_dragon
Messages postés2336Date d'inscriptionsamedi 14 juillet 2001StatutMembreDernière intervention 5 mai 20096 25 avril 2005 à 18:20
j'ai un problème lorsque je l'appel d,un autre IP que 127.0.0.1 ???
je fais ça pour me connecter dont addresse = 127.0.0.1 ou mon IP
mais dès que je tombe sur _socket.Connect(remoteEP) là ça plante avec un "Aucune connexion n'a pu être établie car l'ordinateur cible l'a expressément refusée"
pourtant mon serveur est bien sur Nom: localhost et port est bien le même.
j'ai fermé tout les firewall et antivirus, donc c'est pas ça non plus
je fais les tests sur un même ordi
jeoff
Messages postés8Date d'inscriptionmercredi 6 avril 2005StatutMembreDernière intervention 9 février 2006 8 avril 2005 à 09:11
ca m'a l'air un peu complexe à mettre en place vu mon niveau actuel.
Je vais commencer par me documenter sur les événements parceque je ne connais pas vb.net; juste vba pour l'instant donc forcèment je suis hyper limité sur le coté "événementiel" de la chose :/
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 7 avril 2005 à 19:15
Je n'ai pas du tout d'expérience en ce qui concerne les serveurs multi-clients, c'est pour ça que cette classe est prévue pour un client se connctant à un serveur (le serveur ferme la connexion en écoute dès qu'un client se connecte).
Pour connecter plusieurs clients, voilà où modifier le code:
dans AutoSocket.vb, dans la région "Evénéments"
Private Sub eventSink_Accept(ByVal sender As Object, ByVal status As Integer) Handles eventSink.Accept
Dim newSocket As Socket = Socket.Accept()
If closeServer Then
_socket.Close()
Else
_baseServer = CloneSocket()
End If
_socket = newSocket
'crée un nouveau dispatcheur: le handle du socket a changé
ResetEventSink(_socket.Handle)
_state = SocketState.Connected
RaiseEvent Connected(Me, EventArgs.Empty)
End Sub
Je pense qu'il faudrait ajouter un événement ClientConnected à AutoSocket avec comme paramètre le nouveau socket qui est connecté au client à la place de l'événement Connected.
Dans eventSink_Accept, le serveur ne fermerait pas le socket sur lequel il écoute, créerait un nouveau AutoSocket avec le Socket retourné par Accept - donc ajouter un constructeur Private qui prend comme paramètre un Socket et qui initialiserait ce socket (voir NewSocket) - ne réinitialiserait pas le dispatcheur d'événement (ResetEventSink), laisserait l'état du socket sur SocketState.Listening et lancerait l'événement ClientConnected.
Voilà, j'espère que ça pourra t'aider sur ton projet.
jeoff
Messages postés8Date d'inscriptionmercredi 6 avril 2005StatutMembreDernière intervention 9 février 2006 7 avril 2005 à 10:48
merci beaucoup ! super boulot !
Ca m'aide pas mal pour mon projet.
Par contre je cherche un moyen de connecter plusieurs clients.
Comment puis-je modifier le code pour celà ?
Merci
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 23 janv. 2005 à 14:27
Réessaye, pour moi ça le télécharge sans problème.
yissine
Messages postés1Date d'inscriptionmercredi 31 mars 2004StatutMembreDernière intervention22 janvier 2005 22 janv. 2005 à 21:11
j arrive pas a telecharger le zip c est normal?
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 21 déc. 2004 à 13:57
D'abord merci pour le commentaire et la note :)
En effet il manque le serveur multithread, comme je n'ai jamais fait de serveur multithread :)
En fait j'ai fait cette source pour les programmes "de bureau", qui ne tournent pas sur un serveur, genre client mail, client FTP, chat, envoi de fichiers ...
cs_Oueb
Messages postés18Date d'inscriptionsamedi 15 février 2003StatutMembreDernière intervention19 septembre 2008 21 déc. 2004 à 10:02
Excelent travail !!! 10/10 manque juste le serveur multithread ... ou alors suis trop con pour trouver :)
magloui
Messages postés8Date d'inscriptionvendredi 2 avril 2004StatutMembreDernière intervention 3 octobre 2007 26 juil. 2004 à 11:02
Bonjour,
Tres bonne source, Pour moi qui suit un grand debutant, cela me fait progresser.
Comme deja demander, comment faire pour que le serveur accepte, plusieur connection.
Et comment faire pour que le serveur continue d'ecouter quand le client se deconnecte.
Un grand merci, pour ton tarvail, continue a nous envoyer de bonne source.
Focalizer
Messages postés76Date d'inscriptiondimanche 19 mai 2002StatutMembreDernière intervention 8 mai 2006 19 juil. 2004 à 19:44
Bonjour,
J'ai ajouté le controle à mon projet, je me connecte à un serveur irc, lorsque le me "whois" sur celui ci, je suis bien connecté.
Lorsque je tente d'utiliser la méthode "Send", il me renvoit une erreur signalant que je suis déconnecté.
J'ai mit un point d'arrêt sur Sock_Closed, mais le programme ne s'arrête jamais sur ce point.
Que faire ?
Focalizer
Messages postés76Date d'inscriptiondimanche 19 mai 2002StatutMembreDernière intervention 8 mai 2006 17 juil. 2004 à 16:48
Très bonne source, génial. Merci
TigerFab
Messages postés115Date d'inscriptionsamedi 15 février 2003StatutMembreDernière intervention18 mai 2008 10 mai 2004 à 16:17
Cooooooool ca !
Merci Xya, là comme ca c'est un génial remplaçant de Winsock pour .net !
Je vais tester chez moi (je suis au bureau là) en modifiant un peu le prg pour voir si on sait facilement envoyer des fichiers et voir si progression OK.
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 10 mai 2004 à 13:15
Voilà, suite à ta demande TigerFab j'ai ajouté les événements DataDeparture (envoi en cours) et SendComplete (envoi terminé).
Enjoy!
Xya
TigerFab
Messages postés115Date d'inscriptionsamedi 15 février 2003StatutMembreDernière intervention18 mai 2008 9 mai 2004 à 23:32
Très très belle source et très bon travail !
Mais j'ai 2 questions ;
- System.net.socket remplace bien winsock de VB6 ? pq ils ont pas prévu les évènements (indispensables) de Winsock alors ? ou faut-il pour ca utiliser une autre classe ?
- tu n'as pas fait l'évènement SendProgress disponible dans WinSock. C'est facile à ajouter ?
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 21 avril 2004 à 17:47
Je pense que tu devrais faire un mini serveur web qui puisse répondre aux reqêtes simples (GET) et générer du html pour la liste des processus en cours. Il y a quelques exemples de serveurs web en VB sur VBFRance, tu pourais t'en inspirer.
Après tu peux facilement acceder à ta liste avec un navigateur.
http://[ip ou nom de l'ordi]:[port ouvert par le serveur web]/[page web à générer]
dionysos6868
Messages postés310Date d'inscriptionjeudi 4 septembre 2003StatutMembreDernière intervention 9 juin 20051 21 avril 2004 à 15:13
Merci de ton aide.
Saurais tu egalement svp comment je pourrais fair pour envoyer des information sur une ecoute de socket apartire d'un page web et avoir un retour
Par exemple sur une page web avoir le listing des processus en route sur mon ordi et d'envoyer l'ordre de fermer tel ou tel processus.
merci
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 21 avril 2004 à 06:24
Ce que tu peux faire c'est créer un projet VB.NET appellé AutoSocket avec les paramètres suivants:
Type: bibliothèque de classes
Espace de noms racine: System.Net.Sockets
Objet de démarrage: aucun
Option Explicit On
Option Strict Off
et tu ajoutes à ce projet les fichiers sources .vb présents dans le zip.
Ca devrait marcher.
Xya
dionysos6868
Messages postés310Date d'inscriptionjeudi 4 septembre 2003StatutMembreDernière intervention 9 juin 20051 20 avril 2004 à 15:00
perso ca ne marche pas soit disant que ma version de .net n'est pas assez ressente pour ouvrire ton projet
si tu a une idée a me propose merci de m'en faire part msn dionysos6868@hotmail.com
merci de ton aide
dionysos6868
Messages postés310Date d'inscriptionjeudi 4 septembre 2003StatutMembreDernière intervention 9 juin 20051 20 avril 2004 à 14:32
Merci a toi je cherche a mettre mon ordi en ecoute sur le net d'en voyer une page html au client pour transmettre des ordre a l'ordi serveur je pense que ton zip va mettre utilie j'espere
merci
djmoha2000
Messages postés1Date d'inscriptionsamedi 15 novembre 2003StatutMembreDernière intervention13 avril 2004 13 avril 2004 à 14:00
ca fais plus de 3 jours que je cherche un code pareil,surtout que j'avais l'habitude de travailler avec vb6(qui est différent).
cependant ca serait interssant de permettre plrs con vers serveur(comme suggéré par cognicasse),ds ce cas soit il faut résoudre le prob des index(groupe de control en vb6),soit utiliser des thread(chaque requéte entrante sera un nouvel thread) sinon creer des instances(à chaque reéception coté serveur) d'un objet socket(par exemple).je travaille actuellement la dessus.
sinon,bon courage et merçi
cognicase
Messages postés63Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention13 juillet 2005 26 mars 2004 à 02:11
C'est super bien ... moi j'aime bien ..
Un petit ajout serait de permettre plusieurs connection sur le serveur avec un nom d'usager comme le fait MSN pis ca y est tu aurais refait MSN .... avec .net ...
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 8 mars 2004 à 21:59
Voilà j'ai mis à jour le zip avec la version simplifiée de SocketEventSink (utilisation de la classe AutoResetEvent au lieu des APIs Winsock et disparition du thread de travail). J'ai aussi changé l'espace de noms, les classes sont maintenant dans System.Net.Sockets au lieu de Sockets.
Xya
irchk
Messages postés11Date d'inscriptionmardi 7 janvier 2003StatutMembreDernière intervention12 mars 2004 8 mars 2004 à 16:48
Autant pour moi, j'avais pas vu qu'il y'avait un zip...dur dur le lundi
irchk
Messages postés11Date d'inscriptionmardi 7 janvier 2003StatutMembreDernière intervention12 mars 2004 8 mars 2004 à 16:09
Arf, bon moi je suis un sti nouveau concernant .net, et je dois retranscrire ce que faisiait le controle winsock....
Ca tombe bien, le post qu'il me fallait MAIS...j'arrive pas a trouver le namespace de la classe autosocket...surtout que je trouve null part un sti renseignement sur cette classe...
Merci pour toutes infos sup !
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 29 févr. 2004 à 20:13
Ben tant que le Framework .NET ne propose pas des classes de remplacement à toute l'API de Windows il faudra faire comme ca, en attendant Indigo de Longhorn.
Sinon si tu décompile le code du Framework tu vois qu'un grand nombre de classes sont juste des wrappers qui utilisent massivement les appels à l'API de Windows (Socket, FileStream, System.Windows.Forms, System.Threading, System.Security.Cryptography, Microsoft.Win32 (là c'est normal :p), GDI+, etc), mais je suis d'accord avec toi qu'il faut plutot écrire du code portable, par exemple pour pouvoir être exécuté sur Mono.
Sinon pour la classe AutoSocket j'ai réussi à un peu l'améliorer, à savoir se débarasser du thread qui dispatche les événements, en utilisant les événements de Windows (les classes Auto/Manual-ResetEvent) et RegisterWaitForSingleObject de ThreadPool: en fait, j'avais pas remarqué que les events WinSock étaient des bêtes events de Windows :)
Faut que je mette à jour le zip.
Xya
Kitsu
Messages postés1Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention29 février 2004 29 févr. 2004 à 01:55
C'est plutot bien monté, mais je regrette qu'il y est des appels sur ws2_32.dll ca va un peu à l'encontre du système de prog. .NET.
Comme c'est dit dans la Classe d'ailleurs :) "Unsafe"
Je pense qu'une autre version du Composant pourrait se contenter de ce qu'offre le Framework en standard et offrir des interfaces plus sympa pour la gestion du stream.
Sinon c bien :)
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 5 févr. 2004 à 13:33
Merci de mettre un commentaire avec la note, c'est toujours frustrant d'avoir une note sans commentaire, de pas savoir ce qui doit être amélioré/changé/ajouté :)
Xya
cs_mahhoura
Messages postés15Date d'inscriptionvendredi 23 janvier 2004StatutMembreDernière intervention25 août 2007 5 févr. 2004 à 10:10
2 sept. 2009 à 21:50
2 sept. 2009 à 21:40
31 août 2009 à 14:34
Merci! Et c'est marrant parce qu'en ce moment je suis aussi en train de bosser avec des sockets, mais non bloquants (sous Linux) et avec Python.
Pour être honnête ça fait des années que j'ai pas touché au code et que j'ai pas programmé en VB.NET donc je suis pas sûr d'être d'une grande aide pour trouver le bug.
Mais pour essayer, est ce que les données sont bien envoyées? Est ce que si tu mets un point d'arrêt sur '_socket.Send(data, ...)' dans AutoSocket.Send() il passe dessus? Et sur la ligne 'RaiseEvent DataDeparture' ?
31 août 2009 à 11:38
Premièrement, je tiens à dire que ce code est vraiment super !
Ensuite, j'ai un petit problème avec les évènements DataDeparture et SendComplete. L'évènement ne se déclenche pas.
J'ai cherché dans le code de la classe d'où pourrait venir l'erreur, mais sans succès.
Voila, voila...
Merci d'avance.
Kardyne.
21 juil. 2009 à 12:42
Comment mettre dans une variable les données d'un socket precis ?
merci
29 avril 2009 à 18:28
Donc d'un côté c'est moins pratique, mais ça force à bien réfléchir à l'architecture de l'application, le flux de données, les threads, etc. Perso c'est quelque chose que j'adore et que je trouve hyper intéressant, mais ça demande pas mal de temps et de recherches.
Par exemple c'est pas une bonne chose d'appeler des fonctions blocantes (synchrones) sur le thread de l'interface graphique, puisque ça fait freezer l'affichage de tes fenêtres. C'est pour ça que le plus simple c'est d'avoir un thread dédié à ton socket. L'alternative c'est d'utiliser les fonctions asynchrones ou des événements mais c'est plus difficile à bien structurer, enfin c'est mon point de vue.
29 avril 2009 à 15:21
Bref je m'y suis mi et je ne le regrette pas, mais je regrette for mon Mswinsck.ocx... ce bon vieux winsock était si facile d'utilisation...
Je trouve franchement la classe system.Net.Socket très mal faite, j'ai même trouvé des exemple de code socket avec des fonctions non synchrones et des timers !
En ce qui concerne ton code il sera toujours utile jusqu'à modification par MS de System.Net.Socket...
29 avril 2009 à 14:57
Ce qui m'étonne un peu c'est que ce bout de code soit toujours utile et utilisé, même 5 ans après que je l'ai écrit !
A+
Xya
29 avril 2009 à 14:36
Merci bien pour toutes ces informations heureusement qu'il y a encore des gens pour partager leur savoir et filer un coup de main sans attendre des choses en retour :) (ce qui fait que le développement évolu plus vite que certaine personnes ou choses de la vie...)
Merci encore @+
29 avril 2009 à 14:27
Par exemple imaginons que tu crées le socket dans le constructeur de ta form:
Public Sub New()
'...
Me.socket = New AutoSocket()
Me.socket.SynchronizingObject = Me
End Sub
et après dans tes gestionnaires d'événements t'as plus à te soucier de Invoke/BeginInvoke (cad les événements sont automatiquement exécutŽs dans le thread principal):
Private sub Control_Disconnect (sender as Object, e as System.EventArgs) Handles Control.Disconnect
'Je veu par exemple afficher "déconnecté" dans un label
label.Text = "Déconnecté"
End sub
29 avril 2009 à 13:18
Car si on gère le code normalement au niveau du formulaire on n'a qu'a faire :
Private sub Control_Disconnect (sender as Object, e as System.EventArgs) Handles Control.Disconnect
'Je veu par exemple afficher "déconnecté" dans un label
If (Label.InvokeRequired) Then
Label.Invoke(New DelegSub(AddressOf e_Connexion), Sender, e)
Else
Label.Text = "Déconnecté"
End If
End sub
Et la on obtient l'état de l'objet de synchronisation du label, mais dans le cas ou le code est géré par ma classe comment transmettre ce paramètre à "syncObj" ???
29 avril 2009 à 12:57
Je vais tester ca de suite, encore Merci ;)
29 avril 2009 à 12:44
Protected syncObj As ISynchronizeInvoke 'objet de synchronisation Windows Forms
Public Property SynchronizingObject() As ISynchronizeInvoke
Get
Return syncObj
End Get
Set(ByVal Value As ISynchronizeInvoke)
syncObj = Value
End Set
End Property
Pour chaque événment tu dois ajouter une méthode OnXXX qui détermine si on doit utiliser BeginInvoke ou pas:
Public Event Disconnected(ByVal sender As Object, ByVal e As EventArgs)
Protected Overridable Sub OnDisconnected(ByVal e As EventArgs)
If Not syncObj Is Nothing AndAlso syncObj.InvokeRequired Then
Dim deleg As New EventHandler(AddressOf SyncDisconnected)
syncObj.BeginInvoke(deleg, New Object() {Me, e})
Else
SyncDisconnected(sender, e)
End If
End Sub
Et une øéthode SyncXXX qui déclenche juste l'événement:
Protected Sub SyncDisconnected(ByVal sender As Object, ByVal e As EventArgs)
RaiseEvent Disconnected(sender, e)
End Sub
La version VB.NET est un peu lourde, comme je pense pas qu'on puisse récupérer le délégué de l'événement contrairement à C#, sinon on pourrait faire (dans OnXXX):
syncObj.BeginInvoke(Me._delegue_Disconnected, New Object() {Me, e})
et se passer de SyncXXX.
Pas de soucis :p J'espère que ca te øettra sur la voie.
29 avril 2009 à 11:48
Je suis en train de faire une classe de dialogue TCP avec un protocole intégré et des fonctions qui utilise les sockets.
Cette classe permettra entre autre de gérer les connexions Client/serveur, l'envoi de message simplifié avec paramètres et gèrera directement l'envoi de fichier avec événements (Start, Finish, Progress...).
J'aimerais pourvoir faire des événements (un peut comme dans ta classe), en ce qui concerne les sockets sans avoir à chaque fois à appeler BeginInvoke/Invoke... :/
J'ai recherché partout mais j'ai pas trouvé grand chose, de plus je ne suis pas un expert en ce qui concerne le multithreading.
ET Merci pour ta disponibilité :p
29 avril 2009 à 08:29
29 avril 2009 à 08:20
J'ai pu trouver quelques explications en faisant des recherches hier,
Par contre... c'est bizard car quand je démarre le programme compilé ça fonctionne ?
l'exception n'est pas prise en compte ???
29 avril 2009 à 00:24
Le problème, c'est que tout les contrôle windows forms (namespace System.Windows.Forms.*) doivent être impérativement utilisés sur le thread principal (c'est à dire tout code qui accède à leur méthodes et propriétés). Il n'y avait aucune vérification dans le Framework 1.1, par contre je crois que c'est à partir du 2.0 que cette "règle est vérifiée", et si elle n'est pas respectée, tu obtiens l'exception que tu as copié-collé.
La solution la plus rapide, c'est d'appeller BeginInvoke/Invoke dans tous les événements du socket, de sorte à exécuter le code qui accède à Windows Forms dans le thread principal. Exemple:
Private Sub socket_DataArrival( sender As Object, data As Byte() )
Me.BeginInvoke(ma_fonction_windows_forms, New Object[] {data}) ' synatxe VB?
End Sub
Private Sub ma_fonction_windows_forms(data As Byte())
txtClientInput.Text = Encoding.UTF8.GetString(data)
End Sub
Ca fait des années que j'ai pas fait de VB.NET (et pas de compilateur sous la main), donc je me souviens plus de la syntaxe, surtout pour la création de tableau et le passage du délégué (voir commentaire).
L'idée c'est tu passe un délégué de ta fonction (ici ma_fonction_windows_forms) comme 1er paramètre, et un tableau contenant la liste des paramètres de ta fonction comme 2ième paramètre. Ca c'est la solution rapide, bête et méchante, et pas hyper propre.
La solution plus "clean" serait de rajouter une propriété SynchronizingObject (de type ISrynchronizeInvoke -- interface implémentée par tous les contrôles Windows Forms) à la classe de Socket. Ensuite tu dois utiliser la méthode BeginInvoke de ton objet SynchronizingObject pour déclencher les événements.
Je pense qu'avec ça tu dois avoir pas mal de pistes pour régler le problème (je pense que tu devrais trouver sur le net le code pour utiliser BeginInvoke/Invoke et les événements VB.NET). J'espère que ça t'aidera!
Greetings from Norway
Xya
28 avril 2009 à 23:18
Opération inter-threads non valide : le contrôle 'txtClientInput' a fait l'objet
d'un accès à partir d'un thread autre
que celui sur lequel il a été créé.
Suis-je le seul à qui cette erreur est survenue ?
26 févr. 2008 à 17:28
Merci
8 sept. 2007 à 23:28
Merci bcp sa va me débloquer dans un de mes projets !!
8 sept. 2007 à 14:23
C'est un Source tré tré util
merci pour la Class !
Je souaite développer un Serveur SMTP, IMAP et POP3
S'a peux M'aider ?
Merci de Me Contacter par Email ou Directe...
11 juil. 2006 à 19:09
Dans tous les cas TCP ou UDP, tu l'instancie la socket avec cette commande :
_socket = New Socket(af, SocketType.Stream, prot)
SocketType.Stream pour de l'UDP -> plantage
Mais sinon vraiment tres pratique comme appli, bravo ;)
16 mars 2006 à 08:14
Je vous explique mon problème. Je souhaite faire un peer2peer privé. Donc arriver à joindre directement une personne sur internet via son ip pour lu itransmettre des paquets. jusque la, rien de bien difficile. Si bien sur les 2 clients sont les passerelles internet.
Supposons maintenant un reseau X1 ou il y a les ordinateur A1, B1 et C1 et A1 est la passerelle.
Supposons aussi un reseau X2 ou il y a les ordinateur A2, B2 et C2 et A2 est la passerelle.
Comment faire pour que C2 puisse directement communiquer avec C (ou B1) sans faire de serveur sur A1 ou A2.
Car mon application marche que de passerelle à passerelle. J'ai essayé le multicast par desespoir mais celà ne apsse pas dans Internet.
Si vous pouviez m'aiguiller dans mon problème par un bout de code .... j'en serai plus que ravi !
Bernard
19 févr. 2006 à 23:42
Redman
1 févr. 2006 à 17:09
Merci d'avance
Salutations
17 janv. 2006 à 08:21
Aurais-tu une idée ?
Merci encore ...
16 janv. 2006 à 09:36
par contre j'ai du placer cette boucle dans la boucle suivante. Sinon l'erreur se produisait encore de temps en temps.
Merci pour ton aide précieuse !
13 janv. 2006 à 12:51
13 janv. 2006 à 12:49
Voilà le code à rajouter dans AutoSocket.Send:
Dim bytesLeft As Integer = data.Length
Dim sendTotalBytes As Integer = data.Length
Dim sendCurrentBytes As Integer = 0
'<==== Code à rajouter
'attend que le socket soit prêt, il se peut que le buffer d'envoi
'soit plein, ce qui lève une exception puisque le socket n'est pas bloquant
While !Socket.Poll(0, SelectMode.Write)
System.Threading.Thread.Sleep(0)
End While
' Code à rajouter ====>
While bytesLeft > 0
12 janv. 2006 à 12:12
Ce code m'a permis de faire un bon dans l'avancement de mon projet. Par contre, l'erreur suivante se produit de temps en temps lorsque j'appelle la méthode Send de ta classe AutoSocket :
"System.InvalidOperationException : Impossible de bloquer un appel sur ce socket, pendant qu'un appel asynchrone antérieur est en cours."
Pour le moment mon application n'envoie qu'une seule trame, mais en reçois plusieurs.
Mes connaissances dans les Socket étant limitées pour l'instant, j'aimerais que tu m'aides à ce sujet.
Merci pour ton aide !
2 janv. 2006 à 13:03
Je suis depuis peu sous VB 2005 et le framework 2. J'essaie en vain, de réaliser un composant similaire en utilisant les classes suivnates : TcpListener, TcpClient et BackGroundWorker.
Malheureusement, mes compétences dans le domaines des sockets (TcpListener, TcpClient étant des dérivées) sont limitées et font que je n'y arrive pas. (Héhé on peut tout savoir faire non plus.)
Ton code est très bien fait, et devrait m'en apprendre beaucoup.
Il faut continuer !!!
14 oct. 2005 à 21:35
Cela me servira beaucoup ! Merci !
Bonne continuation !
25 avril 2005 à 18:22
je comprend pas trop pourquoi, puisque c'est lui le serveur, mais bon.
25 avril 2005 à 18:20
ks.Connect(New IPEndPoint(IPAddress.Parse(addresse), Int32.Parse(port)))
je fais ça pour me connecter dont addresse = 127.0.0.1 ou mon IP
mais dès que je tombe sur _socket.Connect(remoteEP) là ça plante avec un "Aucune connexion n'a pu être établie car l'ordinateur cible l'a expressément refusée"
pourtant mon serveur est bien sur Nom: localhost et port est bien le même.
j'ai fermé tout les firewall et antivirus, donc c'est pas ça non plus
je fais les tests sur un même ordi
8 avril 2005 à 09:11
Je vais commencer par me documenter sur les événements parceque je ne connais pas vb.net; juste vba pour l'instant donc forcèment je suis hyper limité sur le coté "événementiel" de la chose :/
7 avril 2005 à 19:15
Pour connecter plusieurs clients, voilà où modifier le code:
dans AutoSocket.vb, dans la région "Evénéments"
Private Sub eventSink_Accept(ByVal sender As Object, ByVal status As Integer) Handles eventSink.Accept
Dim newSocket As Socket = Socket.Accept()
If closeServer Then
_socket.Close()
Else
_baseServer = CloneSocket()
End If
_socket = newSocket
'crée un nouveau dispatcheur: le handle du socket a changé
ResetEventSink(_socket.Handle)
_state = SocketState.Connected
RaiseEvent Connected(Me, EventArgs.Empty)
End Sub
Je pense qu'il faudrait ajouter un événement ClientConnected à AutoSocket avec comme paramètre le nouveau socket qui est connecté au client à la place de l'événement Connected.
Dans eventSink_Accept, le serveur ne fermerait pas le socket sur lequel il écoute, créerait un nouveau AutoSocket avec le Socket retourné par Accept - donc ajouter un constructeur Private qui prend comme paramètre un Socket et qui initialiserait ce socket (voir NewSocket) - ne réinitialiserait pas le dispatcheur d'événement (ResetEventSink), laisserait l'état du socket sur SocketState.Listening et lancerait l'événement ClientConnected.
Voilà, j'espère que ça pourra t'aider sur ton projet.
7 avril 2005 à 10:48
Ca m'aide pas mal pour mon projet.
Par contre je cherche un moyen de connecter plusieurs clients.
Comment puis-je modifier le code pour celà ?
Merci
23 janv. 2005 à 14:27
22 janv. 2005 à 21:11
21 déc. 2004 à 13:57
En effet il manque le serveur multithread, comme je n'ai jamais fait de serveur multithread :)
En fait j'ai fait cette source pour les programmes "de bureau", qui ne tournent pas sur un serveur, genre client mail, client FTP, chat, envoi de fichiers ...
21 déc. 2004 à 10:02
26 juil. 2004 à 11:02
Tres bonne source, Pour moi qui suit un grand debutant, cela me fait progresser.
Comme deja demander, comment faire pour que le serveur accepte, plusieur connection.
Et comment faire pour que le serveur continue d'ecouter quand le client se deconnecte.
Un grand merci, pour ton tarvail, continue a nous envoyer de bonne source.
19 juil. 2004 à 19:44
J'ai ajouté le controle à mon projet, je me connecte à un serveur irc, lorsque le me "whois" sur celui ci, je suis bien connecté.
Lorsque je tente d'utiliser la méthode "Send", il me renvoit une erreur signalant que je suis déconnecté.
J'ai mit un point d'arrêt sur Sock_Closed, mais le programme ne s'arrête jamais sur ce point.
Que faire ?
17 juil. 2004 à 16:48
10 mai 2004 à 16:17
Merci Xya, là comme ca c'est un génial remplaçant de Winsock pour .net !
Je vais tester chez moi (je suis au bureau là) en modifiant un peu le prg pour voir si on sait facilement envoyer des fichiers et voir si progression OK.
10 mai 2004 à 13:15
Enjoy!
Xya
9 mai 2004 à 23:32
Mais j'ai 2 questions ;
- System.net.socket remplace bien winsock de VB6 ? pq ils ont pas prévu les évènements (indispensables) de Winsock alors ? ou faut-il pour ca utiliser une autre classe ?
- tu n'as pas fait l'évènement SendProgress disponible dans WinSock. C'est facile à ajouter ?
21 avril 2004 à 17:47
Après tu peux facilement acceder à ta liste avec un navigateur.
http://[ip ou nom de l'ordi]:[port ouvert par le serveur web]/[page web à générer]
Par exemple:
http://dionysos:80/listprocess.html
http://dionysos:80/lkillprocess.html?pid=123
J'espère que ça peut t'aider.
Xya
21 avril 2004 à 15:13
Saurais tu egalement svp comment je pourrais fair pour envoyer des information sur une ecoute de socket apartire d'un page web et avoir un retour
Par exemple sur une page web avoir le listing des processus en route sur mon ordi et d'envoyer l'ordre de fermer tel ou tel processus.
merci
21 avril 2004 à 06:24
Type: bibliothèque de classes
Espace de noms racine: System.Net.Sockets
Objet de démarrage: aucun
Option Explicit On
Option Strict Off
et tu ajoutes à ce projet les fichiers sources .vb présents dans le zip.
Ca devrait marcher.
Xya
20 avril 2004 à 15:00
si tu a une idée a me propose merci de m'en faire part msn dionysos6868@hotmail.com
merci de ton aide
20 avril 2004 à 14:32
merci
13 avril 2004 à 14:00
cependant ca serait interssant de permettre plrs con vers serveur(comme suggéré par cognicasse),ds ce cas soit il faut résoudre le prob des index(groupe de control en vb6),soit utiliser des thread(chaque requéte entrante sera un nouvel thread) sinon creer des instances(à chaque reéception coté serveur) d'un objet socket(par exemple).je travaille actuellement la dessus.
sinon,bon courage et merçi
26 mars 2004 à 02:11
Un petit ajout serait de permettre plusieurs connection sur le serveur avec un nom d'usager comme le fait MSN pis ca y est tu aurais refait MSN .... avec .net ...
8 mars 2004 à 21:59
Xya
8 mars 2004 à 16:48
8 mars 2004 à 16:09
Ca tombe bien, le post qu'il me fallait MAIS...j'arrive pas a trouver le namespace de la classe autosocket...surtout que je trouve null part un sti renseignement sur cette classe...
Merci pour toutes infos sup !
29 févr. 2004 à 20:13
Sinon si tu décompile le code du Framework tu vois qu'un grand nombre de classes sont juste des wrappers qui utilisent massivement les appels à l'API de Windows (Socket, FileStream, System.Windows.Forms, System.Threading, System.Security.Cryptography, Microsoft.Win32 (là c'est normal :p), GDI+, etc), mais je suis d'accord avec toi qu'il faut plutot écrire du code portable, par exemple pour pouvoir être exécuté sur Mono.
Sinon pour la classe AutoSocket j'ai réussi à un peu l'améliorer, à savoir se débarasser du thread qui dispatche les événements, en utilisant les événements de Windows (les classes Auto/Manual-ResetEvent) et RegisterWaitForSingleObject de ThreadPool: en fait, j'avais pas remarqué que les events WinSock étaient des bêtes events de Windows :)
Faut que je mette à jour le zip.
Xya
29 févr. 2004 à 01:55
Comme c'est dit dans la Classe d'ailleurs :) "Unsafe"
Je pense qu'une autre version du Composant pourrait se contenter de ce qu'offre le Framework en standard et offrir des interfaces plus sympa pour la gestion du stream.
Sinon c bien :)
5 févr. 2004 à 13:33
Xya
5 févr. 2004 à 10:10