Luigi-Qc
-
12 nov. 2001 à 16:47
cs_the_best
Messages postés212Date d'inscriptionjeudi 13 novembre 2003StatutMembreDerniè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
psykocrash
Messages postés240Date d'inscriptionvendredi 14 juin 2002StatutMembreDernière intervention17 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 ?
gregmena
Messages postés22Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention19 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 :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_the_best
Messages postés212Date d'inscriptionjeudi 13 novembre 2003StatutMembreDernière intervention 6 avril 2006 8 mars 2004 à 16:47
The Best :-p
J'ai le même problème HELPPPPPPPP URGENT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! :(
testtestiop
Messages postés16Date d'inscriptionmercredi 26 novembre 2003StatutMembreDernière intervention14 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.
cs_the_best
Messages postés212Date d'inscriptionjeudi 13 novembre 2003StatutMembreDerniè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)