biz UDP almak için bildiği gibi,. İçinde UDP veri koymak için bir bayt dizisi kabul Socket.ReceiveFrom veya UdpClient.receiveAlttaki Soket UDP için arabellek boyutunu nasıl ayarlayabilirim? C#
Socket.ReceiveFrom kullanmak
UdpClient.receive doğrudan byte döndüren Verilerin
olduğu dizi Sormam, Soket içindeki arabellek boyutunu nasıl ayarlayacağımızdır. İşletim sisteminin UDP verilerini almak için kendi arabellekini koruduğunu düşünüyorum, doğru mu? örneğin, bir udp paketi makineme gönderilirse, işletim sistemi bir arabelleğe koyacaktır ve bizi Socket.ReceiveFrom veya UdpClient.receive'ye yönlendirecektir, değil mi?
Dahili arabelleğin boyutunu nasıl değiştirebilirim?
Socket.ReceiveBuffSize'i denedim, UDP için hiç bir etkisi yok ve açıkça TCP penceresi için olduğunu söyledi. Ayrıca, Socket.ReceiveBufferSize'in UDP için DEĞİLDİĞİNİ kanıtlayan çok fazla deney yaptım.
Herkes, UDP dahili arabelleği hakkında bazı bilgileri paylaşabilir mi ??? Ben mesela için, burada bazı mesajları gördük
sayesinde
http://social.msdn.microsoft.com/Forums/en-US/ncl/thread/c80ad765-b10f-4bca-917e-2959c9eb102a
Dave Socket.ReceiveBufferSize UDP iç tampon ayarlayabilirsiniz söyledi. Katılmıyorum.denemeler yaptım şu şekildedir:
27 barındıran (en azından neredeyse) aynı anda bir LAN içinde bana 10 KB'lık udp paketi gönderebilir. Paketin her birini idare etmek için bir zaman döngüsüm var. Her paket için bir iş parçacığı bir tanıtıcı oluşturur. Paketleri almak için UdpClient veya Soket kullandım.
Paketlerin yaklaşık% 50'sini kaybettim. Bence UDP'nin gönderdiği patlamanın bir patlaması ve hepsini zamanında ele alamıyorum.
Bu yüzden UDP için arabellek boyutunu artırmak istiyorum. Tampon boyutunu 1 MB olarak değiştirirsem tamponda 27 * 10KB = 270KB veri kabul edilebilir, değil mi?
Çok sayıda değere Socket.ReceiveBufferSize değiştirmeyi denedim ve yalnızca hiç bir etkisi yok.
Herhangi biri yardımcı olabilir?
@heavyd: Cevabınız için teşekkürler. Benim kodum sizinkilere çok benziyor. ama ilgileniyorsanız basit bir deney yapabilirsiniz. ayrı iki sınıfa - Sunucu ve İstemcimiz var. Client.cs'inizde , UdpClient'i sadece yerel paketinize 8888'e 200 paket (her bir bağlantı noktası) göndermek için kullanın (istediğiniz herhangi bir bağlantı noktası) , kodunuzda gösterildiği gibi sürekli olarak alıyorsunuz Elbette, lütfen öncelikle server.cs dosyasını çalıştırın. Sonuçta, paketlerin% 90'ı alınabilir. Nokta UDP'nin gönderilmesi, çok fazla paketin geldiği ve sunucunuzun işleyemediği bir patlamadır. ve tampon taşar. – Jack
Evet ve ReceiveBufferSize değerini "4096" dan daha yüksek bir değere ayarlamanın "4 * 4096" nın hiçbir şey yapmadığını mı söylüyorsun? – heavyd
@heavyd, ReceiveBufferSize için üst sınırın ne olduğunu bilir miyim? – Jack