Probleme Winsock client/serveur (vb) [Résolu]

meuh33 29 Messages postés lundi 14 juin 2004Date d'inscription 6 mai 2006 Dernière intervention - 9 avril 2006 à 15:14 - Dernière réponse : cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention
- 10 avril 2006 à 19:51
Bonjour!

Je débute en visual basic, et j'ai voulu faire un petit chat avec winsock.
(j'utilise Visual Basic 6.0)
Pour cela, je me suis aidé des nombreux tutorials du web, mais malgres tout un probleme persiste...

Dans mon aplication j'ai créé 2 winsock, un qui écoute le port 80 et recoit les connection (le serveur) et l'autre qui envoi les donées d'une textbox sur le port 80, quand j'appuie sur un bouton. (je donne au winsock client mon ip comme remotehost, ainsi il est censé communiquer avec le winsock serveur de mon apli)

Donc je fais :
WinsockClient.Connect
Et je sais grace au code:
Private Sub WinsockClient_Connect()
Label_co.Caption = "Connecté/client"
Beep
End Sub
Que le client se connecte bien. (le label_co se met a afficher "connecté/client")

PAR CONTRE le code suivant ne me renvoi rien lors de la "connection":
Private Sub WinsockServeur_Connect()
Label_co2.Caption = "Connecté/serveur"
Beep
End Sub
Le label_co2 ne prend pas la valeur "Connecté/serveur" !!

=> Donc le client se considere connecté au serveur, mais le serveur ne se considere pas connecté ?

C'est peut etre à cause de cela que le reste ne marche pas...
La commande WinsockClient.SendData ne marche pas, l'application plante quand je demande au client d'envoyer un texte, apres la "connection" de celui ci au serveur..

Si quelqun pouvait m'aider sa serait super!
(je me suis pas mal aidé de ce tres bon tutorial http://www.vbfrance.com/code.aspx?ID=4644 )

Un grand MERCI d'avance
Afficher la suite 

7 réponses

Meilleure réponse
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 9 avril 2006 à 19:51
3
Merci
lol : rappel : "ça ne marche pas" ne veut rien dire
Pour le code, c'est bon, je ne vois rien de spécial. C'est le strict minimum nécessaire.
Tu as surligné une ligne : Le programme se plante sur cette ligne là ?
Quel message d'erreur ?
A mon avis, ta connexion est refermée.
Cherche parmi ton code si tu fais un Winsock.Close quelque part.

Rappel du mode de debug, ligne par ligne :
Lance ton programme avec F8 au lieu de F5 (ou Ctrl-F5) : Ton programme s'exécutera ligne par ligne.
Vérifie le contenu des variables et autre composant simplement en survolant le nom de la variable avec la souris
Si tu lances ton programme avec F5 et que tu veux t'arrêter sur une des lignes avant exécution (pour vérif), tape F9 sur la ligne en question.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 9 avril 2006 à 17:03
0
Merci
Salut
Relis les tutoriaux et l'aide du composant Winsock
L'évènement _Connect ne se produit que côté client, pas côté serveur.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 9 avril 2006 à 17:06
0
Merci
"SendData ne marche pas" : çe qui ne veut rien dire.
Si tu fais un SendData et que tu n'es pas connecté, tu auras un message d'erreur.
Vire tous les "On Error Resume Next" de ton code : ça facilitera les recherches.
Que fais-tu côté serveur pour accepter la connexion ?
Que fais tu lors de la réception de données ...

Manque les infos importantes !

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
meuh33 29 Messages postés lundi 14 juin 2004Date d'inscription 6 mai 2006 Dernière intervention - 9 avril 2006 à 18:01
0
Merci
merci jack de bien vouloir m'aider : )

= >Je n'ais pas mis de "On error resume next" dans mon code, juste ce morceau de code pour chaque Winsock:

Private Sub Winsock_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
MsgBox "Erreur Winsock: Plantage immédiat!"
End
End Sub

De cette maniere je sais quel winsock pose un probleme, et l'aplication se ferme.
Je viens d'essayer en enlevant ce morceau de code, cela ne résoud pas mon probleme.

=>Pour accepter la connection du coté serveur, j'utilise ce code:
(Je précise que dans mon code, Winsock1 est le client et Winsock 2 est le serveur.)

Private Sub Form_Load()
Winsock2.LocalPort = 80
Winsock2.Listen 'le serveur écoute les infos rentrantes
MsgBox "server en écoute: winsock2.listen"
End Sub

'#### CODE POUR ACCEPTER LA CONNECTION DU COTE SERVEUR ####
Private Sub winsock2_connexionRequest(Index As Integer, ByVal requestID As Long)
Winsock2.Close
Winsock2.Accept requestID 'autorisation de connection
End Sub


Private Sub winsock2_DataArrival(ByVal bytesTotal As Long)
Winsock2.GetData message_recu3, vbString
Text_recu.Text = message_recu3
MsgBox "message_recu3"
'reception du message dans la textbox Text_recu
End Sub

Voila je t'ais meme mis le reste du code au cas ou :)
Je rajouterais des fonctions quand l'echange marchera.

Tu as peut etre besoin du code de la partie client ?
En gros c'est ca:

Private Sub Command_co_Click() 'On appuie sur le bouton "connection"
If Text_ip.Text = "" Then 'On vérifie que l'utilisateur a bien rentré l'adresse du serveur
MsgBox "Entrez une adresse IP"
Else
Winsock1.RemoteHost = Text_ip.Text
Winsock1.RemotePort = 80
Winsock1.Connect 'connection au serveur
End If
End Sub

Private Sub Command_envoi_Click() 'clic sur le bouton "envoi du message" apres avoir rentré celui ci dans la Textbox "Text_envoi"
Dim message_envoyé As String
message_envoyé = Text_envoi.Text & vbCrLf

Winsock1.SendData message_envoyé 'Envoi du message au serveur
Text_envoi.Text = "" 'vide la textbox Text_envoi
End Sub

J'ai essayé avec ou sans "& vbCrLf" le résultat est le meme (sa ne marche pas).
Lors de mon plantage, quand je clic sur "Débogage" c'est la ligne
Winsock1.SendData message_envoyé
qui est surlignée en jaune.

Excuse moi pour la longueur...
Merci =)
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 9 avril 2006 à 19:53
0
Merci
Pour le Winsock_Error, il ne gère QUE les erreurs du Winsock (timeout ...), mais il ne se passera rien dans ton cas.
meuh33 29 Messages postés lundi 14 juin 2004Date d'inscription 6 mai 2006 Dernière intervention - 9 avril 2006 à 20:25
0
Merci
Merci j'ai trouvé la solution a mon probleme je suis trop content...
une journée de perdue a cause d'une faute d'orthographe...
"winsock2_connexionRequest"
Sa s'ecrit connection... sa m'aprendra.
bonne soirée a+
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 10 avril 2006 à 19:51
0
Merci
Re
Ah, en effet, je n'avais pas fait attention à la syntaxe de l'appel des Sub évènements.
Mais pourquoi n'avait t-elle pas la bonne syntaxe ?
Tu ne l'as quand même pas écrite à la main ?
Tu sais (j'espère) qu'il suffit, dans ta page de code, de sélectionner l'objet dans la ComboBox en haut à gauche, puis de sélectionner la propriété/evènement disponible dans le ComboBox en haut à droite.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro

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.