J'utilise le code suivant pour envoyer un fichier via tcp.Problème d'envoi de fichier TCP dans .NET, Socket NetworkStream
Si j'envoie plusieurs fois le même fichier consécutivement pour tester s'il est robuste, je reçois le premier fichier correctement et l'autre foiré.
Tous les fichiers endommagés ont les mêmes octets incorrects et si je dors (un certain temps) tous les fichiers sont transférés correctement. J'ai remarqué que je devais instancier un nouveau tampon en lisant mon fichier pour que tout soit bien fait. Mais je ne comprends pas pourquoi.
Je crains que ma solution de réinstanciation d'un tampon ne puisse cacher un autre problème majeur. Toute suggestion?
using(var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read))
{
using(var binaryReader = new BinaryReader(fileStream))
{
var _sendingBuffer = new byte[BUFFER_SIZE];
int length = (int)fileStream.Length;
int bytesRead = 0;
//Ensure we reached the end of the stream regardless of encoding
while (binaryReader.BaseStream.Position != binaryReader.BaseStream.Length)
{
bytesRead = binaryReader.Read(_sendingBuffer, 0, _sendingBuffer.Length);
_socket.BeginSend(_sendingBuffer, 0, bytesRead, SocketFlags.None, SendFileCallback, null);
//without this i received some messed up data
_sendingBuffer = new byte[BUFFER_SIZE];
}
}
}
La partie d'envoi est mauvaise par la réponse. Peut-être que la partie de réception est cassée aussi bien. Postez le code. – usr
Notez qu'il est plus facile de s'appuyer sur des protocoles standards comme HTTP. Les prises sont très difficiles à utiliser. – usr
En fait, envoyer et recevoir des pièces fonctionnent, je ne cherche pas un moyen de faire ce travail. Je ne peux pas utiliser Http Je suis limité par mon environnement et les exigences et les politiques de nombreuses façons (WinCE) – sam