は、私は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);
}
buffer.Lengthを確認する代わりに、ReadAsyncメソッドの戻り値を確認する必要があります。 –