de situation simple:Comment déterminer la fin d'un transfert de fichiers (données) du client vers le serveur (Socket)
Le client sur un Socket envoie une pièces (par exemple, 256 octets) du fichier (données) au format byte []
au serveur. Le serveur reçoit les données de manière asynchrone. Comment déterminer quand un fichier (données) est transmis complètement? (Côté serveur)
Voici le code sur le serveur côté responsable de la réception des données
public static void ReadCallback(IAsyncResult ar)
{
String content = String.Empty;
// Retrieve the state object and the handler socket
// from the asynchronous state object.
StateObject state = (StateObject)ar.AsyncState;
Socket handler = state.workSocket;
// Read data from the client socket.
int bytesRead = handler.EndReceive(ar);
if (bytesRead > 0)
{
BinaryWriter writer = new BinaryWriter(File.Open(@"D:\test.png", FileMode.Append));
writer.Write(state.buffer, 0, bytesRead);
writer.Close();
// All the data has been read from the
// client. Display it on the console.
Console.WriteLine("Read {0} bytes from socket!",
bytesRead);
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReadCallback), state);
}
}
Y at-il une méthode qui permet de faire les quelques-uns qui suit?
if (bytesRead > 0)
{
....
if(state.buffer!=end of receive)
{
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReadCallback), state);
}
}
Ou, je peux essayer d'ajouter des informations à cet objet byte[]
(par exemple, une chaîne de caractères avec étiquette <EOF>
) mais je dois analyser cette information sur chaque étape. Puis-je faire cette vérification plus simple et comment? Ou utilisez une autre manière ...
Envoyer la taille du fichier avant d'envoyer le fichier. –
Je voudrais faire toutes les actions en une étape, si possible – chromigo