Bir TCPServer ve İstemci programı yazıyoruz. TcpClient arabelleğinde ne kadar yer var? Gibi, hangi noktada veri atmaya başlayacak? TcpClient'in engellenip engellemeyeceğini veya kendi arka plan iş parçacığına (arabellek dolduramayacak şekilde) girmesi gerekip gerekmediğini belirlemeye çalışıyoruz.NetworkStream ve TcpClient ne kadar tampon içeriyor?
cevap
Ara bellek boyutları TcpClient.ReceiveBufferSize ve TcpClient.SendBufferSize'dan edinilebilir.
uygun tampon boyutları veri alındığı gibi/TCP düzeyinde kabul (veya değil) değişir. TcpClient varsayılan olarak engelleniyor.
hiçbir veri veri uzakta altındaki hata koşullarında (akran vb/çöker/çıkışları kaybolur gibi)
MSDN belgelerine varsayılan diyor atmak olabilir ama, tam tamponların sonucunda atılacaktır TcpClient
için send ve receive tamponlarının boyutu 8192 bayt veya 8K'dir. Belgeler, bu arabelleklerin ne kadar büyük olabileceği konusunda bir sınır belirtmez.
Emin olduğunuzu bildiğiniz gibi, TcpClient
aracılığıyla temelindeki NetworkStream
nesnesini kullanarak veri gönderip alırsınız. Bunların senkronize veya senkronize olmayan işlemler olup olmadığını kontrol edersiniz. Senkronize bir davranış istiyorsanız, NetworkStream
numaralı Read
ve Write
yöntemlerini kullanın. Eşzamansız davranışı istiyorsanız, BeginRead
/EndRead
ve BeginWrite
/EndWrite
işlemlerini kullanın.
bazı ön uç uygulaması kapsamında veri alıyorsanız, ben çok bu ayrı bir konu asenkron yöntemleri veya eşzamanlı kullanarak yapmak ister ikincil bir iş parçacığı bunu tavsiye ederim. Bu, arka planda veri göndermeyi ve almayı sürdürürken kullanıcı arayüzünüzün kullanıcıya yanıt vermesini sağlar.
asenkronize etmek istiyorsak ya da sadece arka plan iş parçacığı – Earlz
@Earlz'de eşzamanlı olarak yapmak için, ikisi arasında muazzam bir fark olduğundan emin değilim. Eşzamansız yöntemler, örn., BeginRead(), kendi "AsyncCallback" yöntemlerini ayrı bir iş parçacığı üzerinde yürütür. Günün sonunda, bir kullanıcı arabiriminden kullanıcı girdisini de işlerken veri göndermeye/almaya çalışıyorsanız ikincil bir iş parçacığı kullanmanız gerekir. –
@MattDavis, bu yaygın bir yanlış anlama. .Net Async I/O yöntemleri aslında bir işletim sistemi özelliği çağrı G/Ç Tamamlama Bağlantı Noktalarından yararlanır, böylece hiçbir soket engellenir veya G/Ç için bir yuvada veya dosya sisteminden veya adlandırılmış bir borudan beklenirken kullanılmaz her neyse. –
- 1. TcpClient ve NetworkStream'in
- 2. - İhtiyacım Ne filestream tampon
- 3. TcpClient
- 4. İskele ne kadar ölçeklenebilir?
- 5. Basit TCPClient/Listner ("merhaba dünya") örneği
- 6. Büyük sayı ne kadar?
- 7. Ne kadar akıllıca
- 8. anahtarı-tampon listeden "nefret tampon" dışla
- 9. Clojure 1.3 ne kadar kararlı?
- 10. Captcha Alternatif, ne kadar güvenli?
- 11. Varlık Çerçevesi Ne Kadar Güvenli?
- 12. ImagesService.getServingUrl URL'si ne kadar sürer?
- 13. Chokidar (Node.js) ne kadar verimli?
- 14. CSS'de milimetreler ne kadar doğrudur?
- 15. Dokan sshfs ne kadar kararlı?
- 16. GORM'in test edilmesi ne kadar?
- 17. SIFR: Çok fazla ne kadar?
- 18. PHP'nin substr ne kadar verimli?
- 19. ne kadar güvenilirdir? Okuduğum kadarıyla
- 20. Orijinalin ne kadar gerisinde Lucene.Net?
- 21. Threejs - Buffergeometrilerden ne kadar kazanıyorsunuz?
- 22. Kodumun çalışması ne kadar sürer?
- 23. Mondrian ne kadar bellek kullanıyor?
- 24. Alfanumerik _ ve boşluk içeriyor mu?
- 25. Bu node.js Buffer neden rastgele değerler içeriyor?
- 26. XPathNavigator ve XmlReader arasındaki hız farkı ne kadar büyük?
- 27. int ve double arasında dönüştürmek ne kadar pahalı?
- 28. Bir GUID ne kadar pahalı ve daha hızlı olurdu
- 29. Bellek ne kadar pahalı, adres defteri ve CoreData'ya veri yazıyor?
- 30. iOS ve Androids cihaz jetonu uzunluğu ne kadar
Bilgisayarın belleği bitene kadar veri almaya devam edecek mi? – Earlz
Hayır, TCP akış denetimi sağlar. Tamponlar dolduğunda, diğer uç göndermeyi durdurur. – nos
Sunucudan da sorumluyum, bu durumda, sunucuda ne olur? Tamponlar ne zaman 'TcpServer' – Earlz