2009-07-21 11 views

cevap

21

Kesinlikle! Akışta sadece Read(...) numaralı telefonu arayın. Veriler mevcut olana kadar engellenecektir. Gerçekten , TcpClient'u kullanmak için'a sahip olmadıkça, akışta normalde mümkün olduğunca çok şey yapardım. Soketi kullanmak isterseniz, veri mevcut olana kadar (veya soket kapalı) Receive(byte[]) numaralı telefonu arayın.

Artık engellemek istemiyorsanız, eşzamansız çalışmak için Stream.BeginRead veya Socket.BeginReceive'u kullanabilirsiniz. (. Veya ReadAsync .NET 4.5 itibariyle)

Ben şahsen hemen hemen yararsız olduğu Available bulup bir uyku yuvarlak döngü kesinlikle verimsizdir (dereler ve prizleri her ikisi birden) - bağlam anahtarına sahip olmak istemiyoruz veri gelmediğinde iş parçacığı ve veri içeri geldiğinde uykunun bitmesini beklemek istemezsiniz.

+0

StreamReader.ReadToEnd() kullanımı da işe yaramalı mı? –

+0

@Jader: Yalnızca diğer uçtan * metni geçiriyorsa ve * gönderimi bittiğinde soketi kapatır. Örneğin, HTTP KeepAlive bağlantıları için iyi değil. –

+1

@tig: "ReadLine" öğesi null değerini döndürürse, bu, akımın kapatıldığı ve daha fazla satır bulunmadığı anlamına gelir. Ağ seviyesinde olup bitenlere bakmanız gerektiği gibi geliyor. Wireshark ile. –

İlgili konular