Dosya aktarımı yapan C# içinde bir sunucu ve istemci oluşturdum. Ama aktarırken, bir kaç saniyeliğine durur ve devam eder. Göstermek için YouTube'da bir video yükledim: http://www.youtube.com/watch?v=GGRKRW6ihLoAğ aktarımı duraklatılıyor
Gördüğünüz gibi bir süre duraklar ve devam eder.
Alıcı:
using (var writer = new StreamWriter(Path.Combine(_localPath, file.FileName))) {
var buffer = new byte[_bufferSize];
while (file.Transferred < file.Size && _active) {
int read = ns.Read(buffer, 0, _bufferSize);
writer.BaseStream.Write(buffer, 0, read);
file.Transferred += read;
}
writer.Close();
}
Gönderen:
using (var reader = new StreamReader(file.FilePath)) {
var buffer = new byte[_bufferSize];
while (file.Transferred < file.Size && _active) {
int read = reader.BaseStream.Read(buffer, 0, _bufferSize);
ns.Write(buffer, 0, read);
file.Transferred += read;
}
reader.Close();
}
+1 video için :-) –
biraz daha fazla bilgi güzel olurdu, bu bir tcp bağlantısı mı yoksa udp mi? Dosyayı bağlantı üzerinden gönderir mi yoksa orada bazı protokol var mı? Videoda duraklama göremedim, ne oldu? Duraklatıldığında devreye giren GC olabilir mi? Arayüz asar mı yoksa sadece veriyi yazan thread mı? Aktarımın% 'sine eriştiğinizde bu iş parçacığı güvenli mi? – Peter
TcpClient ve TcpListener. Protokolüm var. Örneğin% 6,2 ve% 24,03 oranında duraklar. Arayüz asılmıyor. Eşzamanlı dosya aktarımlarını destekler, böylece aynı anda iki dosya aktarımı yapabilir ve aktarımlar aynı anda duraklamaz. Evet, bu iş parçacığı güvenli inanıyorum, çünkü bu işlevselliği eklemeden önce oldu. – ErikTJ