[Visual basic] VB et Winsock

VB et Winsock [Visual basic] - Programmation

Marsh Posté le 07-06-2001 à 10:11:06    

Bonjour à tous !
 
Je programme actuellement une application client/serveur en VB et j'ai quelques problèmes avec Winsock:  
lorsque je reçois plusieurs messages très raprochés, winsock les considère comme un seul message (qui contient en fait les 2 messages concaténés).
 
Existe-t-il une solution pour éiter ce problème autrement que par un timer?
 
Merci d'avance pour vos réponses
 
Mareek

Reply

Marsh Posté le 07-06-2001 à 10:11:06   

Reply

Marsh Posté le 07-06-2001 à 11:33:13    

Pourkoi ne separe tu pas tes message envoye avec des separateur (flag) bien significatif. ainsi tu decouperai en 2 msg a traiter que tu as recu d'un coup.
 
Br@scoo

Reply

Marsh Posté le 07-06-2001 à 11:47:50    

J'y ai pensé, mais je voulais faire un truc plus "propre".
 
Enfin, s'il n'y a pas d'autre solution...
 
Merci quand même.
 
mareek

Reply

Marsh Posté le 07-06-2001 à 12:12:51    

Je vois pas en koi ce n'est pas propre.
C'est comme ca que cela fonctionne, si tu veux recevoir des données sur une socket et que tu veux envoyer des paquets , il faut fo bien les separer par kk chose.
 
Br@scoo

Reply

Marsh Posté le 07-06-2001 à 12:28:39    

Question de gouts, j'aurais préféré avoir un seul message à chaque DataArrival.
 
mareek

Reply

Marsh Posté le 07-06-2001 à 13:51:17    

put1 de winsock ...
moi j'ai beaucoup bataillé pour ce composant :gun: ...
la solution "propre" que j'avais adoptée :
    le serveur envoit un truc, il attend l'accuse de reception du serveur
    le client recoit et accuse reception : il envoit un message pour dire OK, envoit le suite (s'il y en a)
 
j'avais utilisé les évènements qui *normalement* faisaient pareil (je crois que c'est send_complete ou un truc comme ca) mais ca marchait pas !!! :??: :gun:
alors je me le suis codé à la dure comme ca ...
plus tard, je me suis dit qu'il aurait ete mieux d'avoir un deuxieme port dédié à l'accusé de reception (genre ftp : un port de donnee et un de commande), ca aurai ete plus simple à gerer
ce serait à refaire je ferais pour chaque envoit :
 
    le serveur avertit sur le port de commande le type de donnee qu'il va transferer
    le client dit qu'il est pret sur le port de commande
    le serveur envoit sur le port de donnee les donnees
    le client averti sur le port de commande qu'il a recu (quand il l'a fait biçen sûr ;))
 
vala vala ... en esperant t'aider ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 07-06-2001 à 14:34:33    

Juste un truc sur winsock :)
Comment on ajoute ce composant ?
Je n'y arrive pas
 
Merci


---------------
-=sHaDeoNeR=-
Reply

Marsh Posté le 07-06-2001 à 14:40:51    

Merci pour le coup de main, je vais essayer cette solution

Reply

Marsh Posté le 07-06-2001 à 16:21:14    

faut pas te gourer ... faut prendre celui qui est dans le liste des composants (projet -> composants ...)je crois que c'est MSWINSCK ...
faut pas faire "ajouter un activex" ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 07-06-2001 à 18:35:24    

J'ai finalement adopté la méthode des flags, mais j'ai un problème:
Lors d'une très grosse charge (20 clients envoyant un message de 300Ko toute les 50 milisecondes), environ 1% des messages sont tronqués de leurs 80 premiers octets (ni plus, ni moins)...
 
d'où ce problème peut-il venir?
 
est-ce du au buffer limité de winsock ?
 
merci d'avance de me répondre.
 
Mareek

Reply

Marsh Posté le 07-06-2001 à 18:35:24   

Reply

Marsh Posté le 07-06-2001 à 18:50:10    

heu ... 300 Ko ou 300 octets par message ?
parceque : 300Ko * 20 * 20 clients ... ca fait ... 120 Mo/sec !!!
sinon heu ... ca vient de n'importe quel client ?
essai plutot avec moins de clients qui envoient une taille différente ... regarde si les messages sont tronqués de autre chose que 80 octets ... pour quels clients ... si c'est le buffer, tu devrais vite capter ;)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 08-06-2001 à 11:04:11    

erreur de ma part, c'est bien 300 octets et non 300Ko et le problème n'est pas spécifique à un client.
j'ai changé la taille des messages en fonction du numéro du client et les messages sont tronqués d'une longueur différente selon le client, donc c'est bien un problème de buffer.
 
Par contre, ce qui est bizarre, c'est que c'est le début du message qui est tronqué, mais jamais la fin. ça ne devrait pas être le contraire ?
 
mareek

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed