2010-02-20 11 views
0

Un ami et moi travaillons sur un projet où nous devons construire un client/serveur UDP fiable en utilisant VB.Net. Nous avons des choses qui fonctionnent bien, mais une chose qui nous échappe toujours est de savoir comment allouer dynamiquement un tampon (octet) pour les données entrantes. À l'heure actuelle, nous devons coder en dur une valeur maximale/MTU (ou utiliser une taille de mémoire tampon très importante et la redimensionner une fois que nous avons fini de recevoir). Est-ce que quelqu'un sait d'une façon que cela peut être fait sans avoir besoin de spécifier la taille du tampon de réception? Fondamentalement, avant d'appeler la fonction de réception sur le socket avec un tampon de taille x, nous voulons connaître x afin que nous puissions allouer un tampon de taille appropriée. Peut-être que c'est un problème dans toutes les programmations de socket que vous avez à faire?Comment allouer dynamiquement un tampon pour recevoir un socket UDP (VB.Net)

+0

Bonjour. Pouvez-vous préciser plus clairement de quel tampon vous parlez? Je crois en Windows Core, l'OS lui-même maintient un tampon pour UDP. Et si vous utilisez Socket.ReceiveFrom, il acceptera un tableau d'octets (un autre tampon) de votre part pour mettre les données. De quel tampon vous parlez? Puis-je savoir? – Jack

Répondre

1

Ceci est l'une des tâches que vous devrez assumer lorsque vous utiliserez UDP. Vous devrez considérer Path MTU discovery. Là encore, puisque vous faites un UDP fiable, vous devriez être capable de détecter automatiquement cela et de passer dynamiquement à une taille de paquet plus petite. Cela résoudra également les problèmes de PMTUD. Heureusement, cela ne ressemble pas trop à: "ceux qui n'utilisent pas TCP sont condamnés à le réinventer." Découvrez les RFC qui sont liés dans cet article pour des idées.

+0

Merci pour la réponse. J'ai lu le RFC Path MTU discovery et c'est quelque chose que nous pourrions envisager de mettre en place dans le futur. Nous pouvons juste aller avec la taille de paquet maximale définie par le Socket qui semble être 8k. Si TCP était une option, nous l'utiliserions à coup sûr, mais vous apprenez vraiment à respecter les gars qui ont construit ces protocoles initialement (quand vous essayez de les reconstruire vous-mêmes) –