Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1463 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Probleme de transfert de fichier via winsock appli Serveur/Clients

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme de transfert de fichier via winsock appli Serveur/Clients

n°1616451
mnyware
En vrai YATA !!!
Posté le 28-09-2007 à 09:59:34  profilanswer
 

Bonjour à tous,
 
j'ai une application Serveur et une cliente que j'ai installé sur 3 machines + serveur (4)
les applis clientes doivent récupérer un fichier de type txt sur le serveur et afficher les infos dans un grid
le probleme c'est que chaque machine ne recoit pas les mêmes quantité de données et pas completement
 
le fichier à récuperer sur le serveur est de 9ko
 
une machine recupere que 5ko ,l'autre 4ko et le dernier 2 ko...
 
je sais pas d'où peut provenir le probleme en mettant des points d'arrêt c'est la bonne taille de fichier qui est envoyé
 
merci pour votre aide...


---------------
Né de la bêtise des hommes et de la haine du genre ....
mood
Publicité
Posté le 28-09-2007 à 09:59:34  profilanswer
 

n°1616462
tegu
Posté le 28-09-2007 à 10:19:18  profilanswer
 

Va falloir que tu nous donnes un peu de code.
Là, à part faire des conjectures à n'en plus finir on ne va pas avancer beaucoup.

n°1616474
mnyware
En vrai YATA !!!
Posté le 28-09-2007 à 10:53:00  profilanswer
 

côté serveur :
 
Private Sub tcpserver_ConnectionRequest _
(Index As Integer, ByVal requestID As Long)
 
Nbre_client_current = Nombre_client - serveur.ListClient.ListCount
   
If Nbre_client_current = 0 Then
     
    For i = 0 To serveur.ListClient.ListCount
        If serveur.ListClient.ListCount = 0 Then Exit For
        tabligneip = Split(serveur.ListClient.List(i), "  " )
 
        If i = serveur.ListClient.ListCount Then Exit For
        If tabligneip(0) = TCPserver(0).RemoteHostIP Then GoTo here
         
    Next
    Exit Sub
     
here:
 
End If
 
If TCPserver(0).State <> sckClosed Then 'Si la connection n'est pas fermée,
 
    If Index = 0 Then
        intMax = intMax + 1
        Load TCPserver(intMax)
        'TCPserver(intMax).Close 'on la ferme
        TCPserver(intMax).LocalPort = 0
        c = TCPserver(0).RemoteHostIP
        TCPserver(intMax).accept requestID 'On accepte la connection qui arrive
        TCPserver(intMax).SendData "Taille" & FileLen(chemin & "\contacts.txt" )
         c = TCPserver(0).RemoteHost
    End If
End If
 
End Sub
 
 
Coté Client :
 
Private Sub tcpClient_DataArrival _
(ByVal bytesTotal As Long)
Dim Data As String 'Variable qui va stoker les données pour creer le fichier
 
On Error GoTo fin
TCPclient.GetData Data 'Recevoir les données
test_connexion = 0
'*****************************demande d'envoi du fichier contacts.txt***************************
If Left(Data, 6) = "Taille" And cmdenvoyer.Enabled = True And fermer = 0 And mise_en_service = 0 Then 'Si le client envoi la taille du fichier,
    cLenTotal = Int(Mid(Data, 7)) 'on l'enregistre
    TCPclient.SendData "Go$$" & Description 'On informe que l'on est prêt a recevoir le fichier
    Exit Sub
End If
'****************************envoyer un message*****************************************
If Left(Data, 6) = "Taille" And cmdenvoyer.Enabled = False Then
    envoi_message = "$P$" & CStr(NUM) & "$P$" & LevelSent & "$P$" & messagesent & "$P$" & Description
    TCPclient.SendData envoi_message
    Exit Sub
End If
 
'*****************************demande d'envoi du fichier contacts.txtn lorsque le Client est en marche avant le server***
If Left(Data, 6) = "Taille" Then  'Si le client envoi la taille du fichier,
    cLenTotal = Int(Mid(Data, 7)) 'on l'enregistre
    TCPclient.SendData "Go$$" & Description 'On informe que l'on est prêt a recevoir le fichier
    Exit Sub
End If
 
If Data = "ACK" Then
    Accusée = "ACK"
    Journal
    Exit Sub
End If
'*****************************Fermeture de Page plus Client *************
If fermer = 1 Then
    TCPclient.SendData "Exit$$" & Description
    Exit Sub
End If
 
'*************************réception du fichier contacts******************************
If Left(Data, 6) = "Taille" Then Exit Sub
 
Open chemin & "\contacts.txt" For Output As #1
Print #1, "";
Close #1
 
 
If FileOpen = False Then 'Si le fichier n'as pas encore été ouvert,
    Open chemin & "\contacts.txt" 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
Put 1, , Data 'On continu de creer le fichier qui télécharge
fin_transfert = 0
 
Timerdogserver.Interval = 60000
Timerdogserver.Enabled = True
Label3.Visible = False
Tabl.Visible = True
Close #1 'On ferme le fichier
 
FileOpen = False 'Le fichier n'est plus ouvert (Pour une éventuelle prochaine connection)
fin:
TCPclient.Close 'On ferme la connection
 
End Sub

n°1616479
tegu
Posté le 28-09-2007 à 11:02:09  profilanswer
 

Je ne suis pas très familier des winsock mais il me semble que tu fais beaucoup de choses dans le Data_Arrival du client et notamment des .SendData qui peuvent parasiter la communication.
 
Je veux dire que ton code est succeptible d'envoyer plusieurs .SendData alors que l'événement Data_Arrival n'est pas encore fini de traiter.
 
Tu utilises un timer en complément, ça ne simplifie pas le boulot de diagnostic.  
Tu as sans doute un problème dans l'enchainement asynchrone des événements winsock et du timer, mais c'est pas évident à voir comme ça.

n°1616550
mnyware
En vrai YATA !!!
Posté le 28-09-2007 à 12:26:04  profilanswer
 

penses tu que si je transfert par paquets ça résoudrai le probleme ??

n°1616621
tegu
Posté le 28-09-2007 à 14:44:58  profilanswer
 

Je ne sais pas mais essaie de tracer précisément le parcours de ton code (ajout d'une fonction de log en fichier) pour savoir à quel moment tes événements se déclenchent.
Tu auras peut-être des surprises... et des réponses.


Message édité par tegu le 28-09-2007 à 14:45:10
n°1621546
mnyware
En vrai YATA !!!
Posté le 10-10-2007 à 12:30:57  profilanswer
 

hello encore moi ...
j'ai toujours le même probleme mon fichier ne se tranfert pas totalement  
malgré le fait que j'ai ramener à quelque ligne le dataArrival et que j'envoi le fichier par paquets
je sais pas si il y a une taille de buffer à définir quelque part etc...
j'attends vos idées merci d'avance


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Probleme de transfert de fichier via winsock appli Serveur/Clients

 

Sujets relatifs
probleme avec la fonction preg_matchProbleme de surcharge d'opérateur et de fonction amies
lire les 10 premier Line du contenue d'un fichierFichier
[Shell] commande sort pour fichier txtModele de quelque fichier source c++ please....
compression d'un fichier[VB] Donner le focus a une appli ?
[easyphp] Probleme d'administrationproblème flash cliquable sous IE6
Plus de sujets relatifs à : Probleme de transfert de fichier via winsock appli Serveur/Clients


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR