2010-03-09 6 views
2

Comme nous le savons pour UDP recevoir, nous utilisons Socket.ReceiveFrom ouComment est-ce que je peux placer la taille de mémoire tampon pour le dessous UDP de douille?

UdpClient.receive

Socket.ReceiveFrom accepte un tableau d'octets de vous mettre les données dans udp.

UdpClient.receive retourne directement un tableau d'octets où les données sont

Ma question est que Comment régler la taille de la mémoire tampon dans Socket. Je pense que le système d'exploitation maintient son propre tampon pour recevoir des données UDP, non? par exemple, si un paquet udp est envoyé à ma machine, le système d'exploitation le mettra dans un tampon et nous attendra à Socket.ReceiveFrom ou UdpClient.receive, n'est-ce pas?

Comment puis-je modifier la taille de ce tampon interne?

J'ai essayé Socket.ReceiveBuffSize, il n'a aucun effet pour UDP, et il est clairement dit que c'est pour la fenêtre TCP. J'ai aussi fait beaucoup d'expériences qui prouvent que Socket.ReceiveBufferSize n'est PAS pour UDP.

Quelqu'un peut-il partager quelques idées pour le tampon interne UDP ???

J'ai vu quelques messages ici, par exemple,

http://social.msdn.microsoft.com/Forums/en-US/ncl/thread/c80ad765-b10f-4bca-917e-2959c9eb102a

Dave dit que Socket.ReceiveBufferSize peut définir la mémoire tampon interne pour UDP. Je ne suis pas d'accord.

L'expérience que je l'ai fait est comme ceci:

27 hôtes envoyer un paquet udp 10KB à moi dans un réseau local en même temps (au moins presque). J'ai une boucle while pour gérer chacun des paquets. Pour chaque paquet, je crée un thread pour le gérer. J'ai utilisé UdpClient ou Socket pour recevoir les paquets.

J'ai perdu environ 50% des paquets. Je pense que c'est une explosion de l'envoi UDP et je ne peux pas gérer tous à temps.

C'est pourquoi je veux augmenter la taille de tampon pour UDP. disons, si je change la taille de la mémoire tampon à 1 Mo, alors 27 * 10 Ko = 270 Ko de données peuvent être acceptées dans le tampon, non?

J'ai essayé de changer Socket.ReceiveBufferSize en beaucoup de nombreuses valeurs, et il n'a tout simplement aucun effet.

Quelqu'un peut-il aider?

+0

Appartient à StackOverflow.com – Snark

+0

@Jack, s'il vous plaît ne pas poster plusieurs fois sur les sites. http://stackoverflow.com/questions/2408212/how-can-i-set-the-buffer-size-for-the-underneath-socket-udp-c Si votre question n'appartient pas à Stack Overflow les modérateurs seront là déplacez-le à l'endroit approprié. – heavyd

+0

Désolé de poster plusieurs fois. Dans le post original, quelqu'un me suggère de poster ici. La question invovle tricher le registre de Windows pour changer la taille de la mémoire tampon pour UDP. –

Répondre

1

J'ai parfois abandonné des paquets, et j'ai eu du succès en augmentant le tampon.

J'ai utilisé UdpClient, et sur son socket, j'ai défini une valeur plus grande que la valeur par défaut (qui était 8192 octets). Cela a résolu le problème pour moi. Dans mon scénario pourrait clairement suivre que plus la taille est petite, plus les gouttes sont grandes, plus elles sont grandes, moins elles sont nombreuses. J'ai finalement choisi une valeur de 2^18 pour mon application.

Questions connexes