2017-04-22 1 views
0

は、私はLAN内のファイルを受信するファイルやStreamSocketListenerを送信するためにStreamSocketを使用しています。しかし、私がテストしたとき、私の受信したファイルサイズは、私が送ったファイルよりも小さいです(例えば、私の送られたファイルサイズは約100Mで、受信したファイルサイズはわずか2-3Mです)。使用StreamSocketファイルを転送し、間違ったデータを受信する(UWP)私のプロジェクトで

私は非常に混乱しています。私のコード、tks。

コード(ファイルがStorageFileである、項目は私のカスタムクラスである)

var fileStream = await file.OpenStreamForReadAsync(); 
var fileInputStream = fileStream.AsInputStream(); 

StreamSocket socket = new StreamSocket(); 
HostName serverHost = new HostName(item.Address); 
string serverPort = item.Port; 
await socket.ConnectAsync(serverHost, serverPort); 

uint capacity = 10000000; 
Windows.Storage.Streams.Buffer buffer = new Windows.Storage.Streams.Buffer(capacity); 

// Send some heads 
StreamWriter streamWriter = new StreamWriter(socket.OutputStream.AsStreamForWrite()); 
await streamWriter.WriteLineAsync("file"); 
await streamWriter.WriteLineAsync(file.Name); 
await streamWriter.FlushAsync(); 

var outputStream = socket.OutputStream; 

while (true) 
{ 
    await fileInputStream.ReadAsync(buffer, capacity, InputStreamOptions.None); 

    if (buffer.Length > 0) 
    { 
     await outputStream.WriteAsync(buffer); 
     await outputStream.FlushAsync(); 
    } 
    else 
    { 
     break; 
    } 
} 

streamWriter.Dispose(); 
outputStream.Dispose(); 
socket.Dispose(); 

私はちょうど今、この質問を解決し、コード(イベントStreamSocketListener.ConnectionReceivedです)

StreamReader streamReader = new StreamReader(args.Socket.InputStream.AsStreamForRead()); 
string head = await streamReader.ReadLineAsync(); 

string fileName = await streamReader.ReadLineAsync(); 

StorageFile file = await DownloadsFolder.CreateFileAsync(fileName, CreationCollisionOption.GenerateUniqueName); 
var inputStream = args.Socket.InputStream; 

uint capacity = 10000000; 
Windows.Storage.Streams.Buffer buffer = new Windows.Storage.Streams.Buffer(capacity); 

if (file != null) 
{ 
    CachedFileManager.DeferUpdates(file); 

    while (true) 
    { 
     await inputStream.ReadAsync(buffer, capacity, InputStreamOptions.None); 

     if (buffer.Length > 0) 
     { 
      await FileIO.WriteBufferAsync(file, buffer); 
     } 
     else 
     { 
      break; 
     } 
    } 

    FileUpdateStatus updateStatus = await CachedFileManager.CompleteUpdatesAsync(file); 
} 
+0

buffer.Lengthを確認する代わりに、ReadAsyncメソッドの戻り値を確認する必要があります。 –

答えて

0

受信を送信。受信コードでは、私はを待つFileIO.WriteBufferAsync(file、buffer);バッファにファイルを書き込む。このメソッドはバッファをファイルに追加できません。だから私はそれを処理するためにOutputStream.WriteAsync()を使用します。

関連する問題