2010-09-09 4 views
0

Lorsque j'utilise netcat pour envoyer une requête udp, j'obtiens une réponse complète. Lorsque j'utilise la classe UDPCLIENT dans C#, je ne reçois pas la réponse complète, il est coupé court. Voici mon codeC# udpclient response cut short

byte[] data = new byte[1024]; 
      string stringData; 

      UdpClient server = new UdpClient(currentIP, currentport); 

      IPEndPoint send = new IPEndPoint(IPAddress.Any, 0); 

      string query = "\\players\\"; 
      data = Encoding.ASCII.GetBytes(query); 
      server.Send(data, data.Length); 

      data = server.Receive(ref send); 


      stringData = Encoding.ASCII.GetString(data, 0, data.Length); 

      MessageBox.Show(stringData); 

Comment puis-je augmenter la mémoire tampon de receieve afin qu'il stocke la réponse complète UDP?

+0

Avez-vous essayé de recevoir à nouveau pour voir si le reste de la réponse vous attend? – Aren

+0

Salut, si je lance la méthode de réception à nouveau, je ne reçois plus de données, et parfois il va se bloquer: < – brux

Répondre

2

Premièrement: UDP n'est pas un protocole garanti; il est tout à fait possible que le message soit perdu et définitivement inaccessible. Deuxièmement, le fait que vous ayez appelé recevoir ne signifie pas que vous avez tout reçu. Vous devez continuer à recevoir et à analyser les données reçues jusqu'à ce que le protocole au niveau de l'application que vous utilisez (il ne semble pas exister dans votre exemple) vous indique qu'il est temps d'arrêter de recevoir et de traiter le message.

+0

Salut merci pour votre réponse. il y a une constance dans la quantité de données qui passe à travers ces paquets qui ne sont pas perdus. C'est le même montant que je reçois à chaque fois. Si j'utilise netcat pour envoyer la requête udp, je récupère toutes les données. si j'essaye server.Receive (ref envoie); une seconde fois, plus de données, je manque quelque chose ?, – brux