2010-01-18 5 views
0

Mon serveur utilise UDP. Il envoie 900bytes/1ms à mon programme automatiquement après avoir été acquis. J'utilise l'API socket dans Windows (VB 6). J'avais fait un test et je sais que le temps de traitement des messages (environ 0,3 ms) de mon programme est plus court que le temps de cycle (1 ms). Donc, la cause devrait être le tampon interne de socket. J'essaie d'appeler la fonction setsockopt pour régler le tampon plus grand:UDP using socket API

setsockopt (SockNum, SOL_SOCKET, SO_RCVBUF, SockBuffer (1), 1048576)

mais je encore perdu des données. Comment puis-je résoudre mon problème? J'utilise la fonction recv pour recevoir des données. Est-ce que recvfrom devrait être meilleur?

Plus d'un, j'ai besoin de faire un tampon FIFO pour UDP. Comment je peux faire (algorithmes ou exemples)?

Répondre

1

Dans votre question, vous semblez vous plaindre de l'utilisation de l'UDP et de la perte de données.

Si vous utilisez UDP, vous allez perdre des données. La façon dont vous évitez de perdre des données est d'utiliser TCP, pas UDP. Si vous essayez de prendre le protocole de datagramme utilisateur et ajouter une livraison fiable de données, vous finirez avec quelque chose qui a tout le contrôle de flux et la fenêtre de données de TCP ... sauf qu'il ne sera pas mis en œuvre aussi bien que tu veux.

Rappelez-vous, « Ceux qui ne comprennent pas TCP sont condamnés à réinventer .... mal »

+0

vous pouvez toujours mettre en œuvre un système TCP comme SYN/ACK, mais avec moins de vérifications, étant ainsi un moyen terme entre TCP et UDP. Mais si le problème est de perdre des données, c'est probablement à cause de l'UDP, oui. –

+0

merci, mais mon serveur est une carte électronique. Il utilise UDP et je ne peux pas changer – kheo

+0

en ce qui concerne, mon ordinateur (exécutant mon programme - client) se connecter directement au serveur par le câble 5m donc je pense qu'il est à peine perdu des données. – kheo

Questions connexes