meuh33
Messages postés29Date d'inscriptionlundi 14 juin 2004StatutMembreDernière intervention 6 mai 2006
-
9 avril 2006 à 15:14
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
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..
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 avril 2006 à 19:51
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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 avril 2006 à 17:06
"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
Messages postés29Date d'inscriptionlundi 14 juin 2004StatutMembreDernière intervention 6 mai 2006 9 avril 2006 à 18:01
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 =)
Vous n’avez pas trouvé la réponse que vous recherchez ?
meuh33
Messages postés29Date d'inscriptionlundi 14 juin 2004StatutMembreDernière intervention 6 mai 2006 9 avril 2006 à 20:25
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
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 10 avril 2006 à 19:51
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