Winsock, envoi de données par internet

BozzoDodo Messages postés 185 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 10 janvier 2008 - 19 nov. 2004 à 19:27
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 20 nov. 2004 à 03:22
Bonjour,
j'aimerai créer un réseau entre 2 ordinateurs reliés par internet. C'est ce que j'ai fait grace au controle Winsock.
Mon problème c'est de savoir quel est la taille maximale de donnée qui peut être envoyée pour que tout soit recu et aussi le temps entre chaque envoi.
Merci de votre aide

4 réponses

thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
19 nov. 2004 à 20:31
les donnees que tu envoi par winsock sont de type string et font 4096 caracteres.

donc deux possibilitées pour fiabiliser un envoi par winsock :

-envoyer que des blocs de 4096 caracteres.

-faire un accuse de reception entre chaque envoi de paquets
(PC A fait un senddata, PC B repond a PC A "OK recu", PC A refait un senddata pour envoyer les donnees suivantes .......)

l'accuse de reception est la meilleur solution et le melange des deux est encore mieux.

pour la vitesse tout depend de ta connexion, si tu as une adsl 512 Ko, tu dois avoir une vitesse d'envoi de 128 Ko/seconde si tu occupe completement la bande passante.
0
BozzoDodo Messages postés 185 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 10 janvier 2008
19 nov. 2004 à 21:24
Ok.
Mais si le pc es tsur du 56k/s, 4096 n'est pas trop?
0
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
19 nov. 2004 à 23:10
il n'y as pas de rapport

tu peut tres bien transmettre des trames de 4096 octets sur une ligne ou des coms a 1Koctets/seconde

recherche sur le site il y a de tres bons tutoriaux sur winsock et plein de sources deja existante.

cherche, ne reinvente pas la poudre.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 nov. 2004 à 03:22
Salut BozzoDodo
Les 4096 octets correspondent à la taille maxi du buffer de ce controle.
Mais, si ta machine est rapide (et qu'elle n'a rien d'autre à faire), il se peut que le winsock te renvoie quelques données alors qu'il en arrive encore d'autres.
Le problème réside donc dans le fait de savoir si toutes les données ont été envoyées ou s'il en reste encore + Si l'appli en face envoie deux données l'une derrière l'autre, les données se suivront côté réception, mais il ne te dira pas quand finit le premièr envoi et où commence le second.
Il va donbc falloir que tu t'invente une sorte de protocole pour donner des indications :
Par exemple (tu feras comme tu veux) :
- Dans ton projet, définis une variable globale :
Dim Données As String

- A chaque DataArrival du winsock, ajoute les données qui arrivent à ta variable :
.GetData Temp, vbString, bytesTotal

puis
Données = Données & Temp

- Installe un Timer avec .Interval = 500 et dedans, tu vas faire l'analyse des infos que tu viens de recevoir.
- Supposons que, à chaque envoi, avant d'envoyer les données, tu ajoutes un texte de reconnaissance, suivi d'une valeur qui serait la longueur du texte que tu envoies :
.SendData "#Envoi texte#52#Le texte que tu veux ou même un fichier, soyons fous"

- A la réception, dans ton Timer, tu cherches quel est l'entête de l'envoi :
Dim Longueur As Long, TailleEnTete As Long
Select Case Split(Données, "#")(0)
Case "Envoi texte"
  Longueur = Split(Données, "#")(1) ' récupère la longueur 52
  TailleEntete = Len("Envoi texte") + Len(CStr(Longueur)) + 3
  If (Len(Données) - TailleEntete) >= Longueur Then
       ' Ok, toutes les données sont arrivées : on extrait
       LigneRecue = Mid(Données, TailleEntete, Longueur)
       ' Supprime ces données de Données 
       Données = Mid(Données, TailleEntete + Longueur + 1)
  End If
Case "Envoi Fichier"
   ' Exactement la même technique ...
End Select


Après, tu peux facilement ajouter des commandes à ton protocole (en faisant attention à bien respecter les min maj des entêtes style "Envoi texte")

Vala
Jack
NB : Je ne répondrais pas aux messages privés
0
Rejoignez-nous