Je transfère un fichier sur un NetworkStream et il semble que lorsque le fichier dépasse 5-10k, le fichier commence à manquer des données et/ou a d'énormes espaces vides .De plus grandes tailles de fichiers sont incorrectement transférées avec un NetworkStream
Voici ce que j'ai:
private string ReadandSaveFileFromServer(TcpClient clientATF, NetworkStream currentStream, string locationToSave)
{
int fileSize = 0;
string fileName = "";
int bytesRead = 0;
fileName = ReadStringFromServer(clientATF, currentStream);
fileSize = ReadIntFromServer(clientATF, currentStream);
FileStream fs = new FileStream(locationToSave + "\\" + fileName, FileMode.Create);
byte[] fileSent = new byte[fileSize];
while (currentStream.DataAvailable)
{
if (clientATF.Connected)
{
bytesRead = currentStream.Read(fileSent, 0, fileSent.Length);
fs.Write(fileSent, 0, fileSent.Length);
}
else
{
break;
}
}
fs.Flush();
fs.Close();
return fileName;
}
Un autre point: si vous êtes déconnecté après cette ligne de code: if (clientATF.Connected) Ensuite, vous obtenez une exception lorsque vous essayez de lire le flux. Je recommande de le mettre dans un essai/catch – Xaqron
Il n'a pas cette ligne de code, et si le pair a fait une fermeture ordonnée, il ne reçoit pas d'exception du tout. Qu'est-ce que tu racontes? – EJP
La vérification de l'homologue est connectée ou non est une méthode async par conception et sur return() lorsqu'il essaie de lire le flux, une exception déclencherait toute lecture/écriture sur un flux [bytesRead = currentStream.Read (fileSent, 0, fileSent .Longueur); ] dont nous ne sommes pas sûrs (sur d'autres machines par exemple) doivent être utilisés avec précaution. – Xaqron