0
在我的项目中,我使用StreamSocket发送文件和StreamSocketListener接收LAN中的文件。但是,当我测试时,我收到的文件大小小于我发送的文件(例如,我发送的文件大小约为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);
}
您应该检查ReadAsync方法的返回值,而不是检查buffer.Length。 –