2010-11-20 14 views
1

Bir .NET sunucusundan bir Soket ile alan bir Silverlight İstemcisine bayt göndermek için bir TcpClient'in NetworkStream'ini kullanıyorum. İstemciden gönderme, Socket.SendAsync üzerinden yapılır.NetworkStream aracılığıyla bir seferde gönderilen asgari garantili baytlar

Sorum şu ki, ileti uzunluğunu göndermeye gerek kalmadan her iki tarafa da "tek seferde" alınmasını beklediğim minimum bayt miktarı ve birkaç bayt mesajını kendim topla.

sayesinde Andrej

+2

1 byte kapatmak - her zaman uzunluğunu göndermek veya bir sonlandırma karakteri kullanın – CodesInChaos

cevap

4

Kesinlikle ileti uzunluğunu göndermeniz gerekir. Ağ akışları tam olarak - akış bilgilerinin akışlarıdır. Temelde bir iletinin sonuna tanıma üç yolu vardır: uzunlukta veri

  • Önek (o bile uzunluk tüm verileri almazsınız en azından teorik olarak mümkün olduğunu unutmayın tek paket) içinde
  • Sadece bir mesaj bağlantı başına her yolu göndermek bir mesaj sınırlayıcı/terminatör
  • kullanın ve bağlantısını sonradan
3

Bu ağ ayarlarına bağlıdır, ancak ağ düğümleri için varsayılan uzunluğu 1500 byte ve en modemler bu kapalı bir şey almak. Bu yüzden çoğu evin 1460 bayt paket boyutuna sahip.

durumunuza optimum büyüklük calculated

olabilir Ama insanlar her zaman kendi ayarları olabilir, bu nedenle tüm istemciler için en uygun paket boyutunu almak hiçbir garantisi yoktur.

İlgili konular