Probleme de connection avec Winsock

Luigi-Qc - 12 nov. 2001 à 16:47
cs_the_best Messages postés 212 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 6 avril 2006 - 6 avril 2004 à 11:52
Je veux programmer un petit chat fonctionnant avec winsock, mais il ne veut pas se connecté.

En mode local (2 chat.exe ouvert sur le meme ordinateur) sa fonctionne. Mais, dès que j'utilise 2 ordinateur différente ca ne connect pas sauf si je l'exécute instruction par instruction avec VB sur l'ordi qui est en serveur.

Je ne comprends pas pourquoi.

Voici le code (désolé il est lourd à cause des nombreux control d'interface)

Merci pour votre attention :)


Dim Msg As String
Dim Nick As String

Private Sub cmdConnect_Click()
Winsock.Close
DoEvents

Winsock.Connect txtIP, 7401

End Sub

Private Sub cmdSend_Click()
Dim Send As String
Dim NbEspaces As Integer
Send = Chr(13) & Chr(10) & "<" & Nick & ">: " & txtSend
Winsock.SendData (Send)
txtSend = ""
txtChat = txtChat & Send
txtChat.SelStart = Len(txtChat)
End Sub

Private Sub Form_Load()
Nick = "Guest"
End Sub

Private Sub Nom_Click()
Nick = InputBox("Quel est ton Surnom?", "Surnom", Nick)
Do While Nick = ""
   Nick = InputBox("Tu dois entrer ton Surnom?", "Surnom", Nick)
Loop
End Sub

Private Sub optClient_Click()
If optClient.Value = True Then
   txtIP.Enabled = True
   txtIP.BackColor = &H80000009
   If txtIP <> "" Then
      cmdConnect.Enabled = True
   End If
   Winsock.Close
   DoEvents
End If
End Sub

Private Sub optServer_Click()
If optServer.Value = True Then
   txtIP.Enabled = False
   txtIP.BackColor = &H8000000F
   cmdConnect.Enabled = False
   Rem Écoute du port
   Winsock.Close
   DoEvents
   
   
   Winsock.LocalPort = 7401
   DoEvents
   
   
   Winsock.Listen
   DoEvents
End If
End Sub

Private Sub txtIP_Change()
If txtIP = "" Then
   cmdConnect.Enabled = False
Else
   cmdConnect.Enabled = True
End If
End Sub

Private Sub Winsock_Close()
   Status.Caption = "Non Connecté"
   Status.ForeColor = &HFF&
   If optClient = True Then
      txtIP.Enabled = True
      txtIP.BackColor = &H80000009
   End If
   optServer.Enabled = True
   optClient.Enabled = True
   txtSend.Enabled = False
   cmdSend.Enabled = False
   Details.Enabled = False
   Deconnection.Enabled = False
   If txtIP <> "" Then
      cmdConnect.Enabled = True
   End If
   MsgBox "La connection a été perdu.", vbCritical
   Winsock.Close
   DoEvents
   If optServer = True Then
      Winsock.LocalPort = 7401
      DoEvents
      
      
      Winsock.Listen
      DoEvents
      
      
   End If
End Sub

Private Sub Winsock_Connect()
Status.Caption = "Connecté sur " & txtIP
Status.ForeColor = &H8000&
txtIP.Enabled = False
txtIP.BackColor = &H8000000F
cmdConnect.Enabled = False
optServer.Enabled = False
optClient.Enabled = False
txtChat.Enabled = True
txtSend.Enabled = True
cmdSend.Enabled = True
Details.Enabled = True
Deconnection.Enabled = True
End Sub

Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Dim NbEspaces As Integer
Winsock.GetData Msg, vbString
DoEvents
txtChat = txtChat & Msg
txtChat.SelStart = Len(txtChat)
End Sub

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)
Dim Erreur As String
Winsock.Close
DoEvents
Status.Caption = "Non Connecté"
Status.ForeColor = &HFF&
txtIP.Enabled = True
txtIP.BackColor = &H80000009
optServer.Enabled = True
optClient.Enabled = True
txtChat.Enabled = False
txtSend.Enabled = False
cmdSend.Enabled = False
Details.Enabled = False
Deconnection.Enabled = False

If txtIP <> "" Then
   cmdConnect.Enabled = True
End If
Erreur = "Erreur " & Number & ": " & Description
MsgBox Erreur, vbCritical
End Sub

Private Sub Winsock_ConnectionRequest(ByVal requestID As Long)

Winsock.Close
DoEvents

Winsock.Accept requestID
DoEvents

Status.Caption = "Connecté avec " & Winsock.RemoteHostIP
Status.ForeColor = &H8000&
optServer.Enabled = False
optClient.Enabled = False
txtChat.Enabled = True
txtSend.Enabled = True
cmdSend.Enabled = True
End Sub

11 réponses

Probleme deja traité... a toi de voir ce qui va pas...

http://forum.vbfrance.com/forum.asp?Article=20635
0
Probleme deja traité... a toi de voir ce qui va pas...

http://forum.vbfrance.com/forum.asp?Article=20635
0
psykocrash Messages postés 240 Date d'inscription vendredi 14 juin 2002 Statut Membre Dernière intervention 17 mars 2009
21 mai 2003 à 19:37
c normal, ton winsock, tu le met en client et en server. tu dois avoir 2 controls winsock.
winsock_client et winsock_server
eske tu peut parler avec plusieurs personnes en meme temps partir d'un poste telephonique ne permettant qu'un seul appel a la fois ?
0
gregmena Messages postés 22 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 19 novembre 2006
27 oct. 2003 à 19:38
GREG_SIDIUS

Voilà j'ai un problème de connection avec Winsock.
sur ma machine j'arrive de faire une connection et à transférer des donnée.

mais le problème, c'est que si je veux connecter 2 pc, marche pas et même sur internet !!!

le prog client est sur mon pc et le prog serveur sur une autre machine. on utilise le même port, et j'ai l'adresse ip du serveur.

voici le code.

========Serveur==============
Dim FileOpen As Boolean 'Indique si le fichier est déjà ouvert
Dim cAvance, cLenTotal As Long 'Progression du téléchargement, et longueur totale

Private Sub cmdListen_Click()
wskRecevoir.LocalPort = 100
wskRecevoir.Listen 'On ouvre le port 100
End Sub

Private Sub Form_Unload(Cancel As Integer)
wskRecevoir.Close 'On ferme la connection Winsock
End Sub

Private Sub wskRecevoir_ConnectionRequest(ByVal requestID As Long)
If wskRecevoir.State <> sckClosed Then 'Si la connection n'est pas fermée,
wskRecevoir.Close 'on la ferme
wskRecevoir.Accept requestID 'On accepte la connection qui arrive
wskRecevoir.SendData "ConnectionOk" 'Et on l'informe du début de la connection
End If
End Sub

Private Sub wskRecevoir_DataArrival(ByVal bytesTotal As Long)
Dim Data As String 'Variable qui va stoker les données pour creer le fichier
wskRecevoir.GetData Data 'Recevoir les données

If Left(Data, 6) = "Taille" Then 'Si le client envoi la taille du fichier,
cLenTotal = Int(Mid(Data, 7)) 'on l'enregistre
wskRecevoir.SendData "Go" 'On informe que l'on est prêt a recevoir le fichier
Exit Sub
End If

If FileOpen = False Then 'Si le fichier n'as pas encore été ouvert,
Open txtChemin.Text For Binary Access Write As #1 'on le fait
FileOpen = True 'Le fichier est maintenant ouvert (Sert pour ne pas l'ouvrir une deuxième fois)
ElseIf FileOpen = True Then 'S'il est déjà ouvert
DoEvents
End If
cAvance = cAvance + Len(Data) 'La progression du téléchargement
lblStatut.Caption = Int(cAvance / cLenTotal * 100) & "%" 'On affiche le pourcentage téléchargé
If Data = "FinEnvoi" Then 'Si le client informe que le fichier est terminé,
Close #1 'On ferme le fichier
FileOpen = False 'Le fichier n'est plus ouvert (Pour une éventuelle prochaine connection)
wskRecevoir.Close 'On ferme la connection
Else
Put 1, , Data 'On continu de creer le fichier qui télécharge
End If
End Sub

==============Client================

Private Sub cmdConnect_Click()
wskSend.Close 'Au cas où il serait encore connecter (évite les plantages)
wskSend.Connect txtIP.Text, 100 'On se connecte
End Sub

Public Function Send_File(FileToSend As String)
Dim Temp As String 'Variable qui va prendre, en langage binaire, le fichier à envoyer
Dim BlockSize As Long 'Variable qui va prendre la taille maximale du fichier a envoyer (Sert pour envoyer un gros fichier)
Open FileToSend For Binary Access Read As #1 'On ouvre le fichier a envoyer
BlockSize = 5000 'On place la longueur la plus haute (Ici pour un fichier de + de 5 Mo) [Très important pour éviter les bugs]
Do While Not EOF(1) 'On boucle jusqu'a ce que le fichier est terminé de télécharger
Temp = Space$(BlockSize) 'Give temp some space To store the data
Get 1, , Temp 'On place les données à envoyer dans la variable Temp
wskSend.SendData Temp 'On envoi les données
DoEvents
Loop
wskSend.SendData "FinEnvoi" 'On prévient que l'envoi est terminé
Close #1 'On ferme le fichier
End Function

Private Sub cmdSend_Click()
Send_File txtChemin.Text 'On envoi le fichier
End Sub

Private Sub Form_Load()
txtIP.Text = wskSend.LocalIP 'On met l'IP du PC par défault
End Sub

Private Sub wskSend_DataArrival(ByVal bytesTotal As Long)
Dim txtRecu As String
wskSend.GetData txtRecu
'Si la connection est vérifiée, on envoi la taille totale du fichier à envoyer pour effectuer un pourcentage de téléchargement :
If txtRecu = "ConnectionOk" Then wskSend.SendData "Taille" & FileLen(txtChemin.Text)If txtRecu "Go" Then cmdSend.Enabled True: lblStatut.Caption = "Connecté" 'On est bien connecté
End Sub

Private Sub wskSend_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)
lblStatut.Caption = Description 'On informe si une erreur se produit
End Sub

si vous trouver une soluce ce serai sympas. merci encore :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_the_best Messages postés 212 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 6 avril 2006
8 mars 2004 à 16:47
The Best :-p
J'ai le même problème HELPPPPPPPP URGENT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! :(
0
cs_the_best Messages postés 212 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 6 avril 2006
8 mars 2004 à 16:50
The Best :-p
PS 1) Il faut que ton port soit suppérieur à 100
PS 2) LE mien est suppérieur à 100 et CA NE MARCHE PAS PAR INTERNET RE-HELPPPPPPPP
0
slimen Messages postés 5 Date d'inscription mercredi 24 mars 2004 Statut Membre Dernière intervention 29 septembre 2005
27 mars 2004 à 09:06
slimen
0
testtestiop Messages postés 16 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 14 mars 2008
28 mars 2004 à 20:36
salut

avez vous bien verifié que vous utilisiez bien la bonne ip, c'est a dire quand vous etes sur internet ni 127.0.0.1 ni une ip privee. Le mieux etant de tester toutes vos ip. un moyen simple de voir si votre port est bien open etant de faire un telnet dessus.

en esperant vous avoir aidé
0
cs_the_best Messages postés 212 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 6 avril 2006
29 mars 2004 à 08:45
Bien non... désolé. j'ai un peut près tout essyé MAIS je crois que j'ai la solution !!!! Il faut (pêut-étre, ja'i pas encore essyé!) faire (coté serveur)

winsock.localport=5555
winsock.bind
winsock.listen


Si QQN peut essayer et me dire si sa marche, c'est parfait !!! :)

The Best :-p
0
cs_the_best Messages postés 212 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 6 avril 2006
6 avril 2004 à 11:48
URGENCE : çA MARCHE !!! la fonction .bind est la solution !!!!
The Best :-p
0
cs_the_best Messages postés 212 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 6 avril 2006
6 avril 2004 à 11:52
Voici un exemple avec le bind :
MON CHAT
The Best :-p
0
Rejoignez-nous