Envoyer des fichiers par socket
Bonjour,
Je veux faire une communication entre client/serveur, j'utilise les sockets avec des petit fichier ça marche mais avec des grand fichiers j'avais des problèmes, le client qui veux envoyer le fichier je lu le fichier en bytes apres je découpe mon fichier par partie de 20 ko, et je costruit mon paquet et j'envoie le paquet quand le serveur reçois le paquet, il ecrit dans le fichier mais ça bloque des fois dans le 3 paquet, defois dans le 11 paquets, je sais pas est ce que ma consuption est vrais???
pour le client voici le code client :
Code:
1 2 3 4
| IPAddress[] ipAddress = Dns.GetHostAddresses("localhost");
IPEndPoint ipEnd = new IPEndPoint(ipAddress[0], 5656);
Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
byte[] fileData = File.ReadAllBytes(filePath + fileName); |
apres je découpe le filedataen paquets
et pour l'envoie
Code:
1 2 3 4 5 6 7
| fileNameLen.CopyTo(clientData, 0);
fileNameByte.CopyTo(clientData, 4);
fileData1.CopyTo(clientData, 4 + fileNameByte.Length);
clientSock.Connect(ipEnd);
clientSock.Send(clientData);
clientSock.Close(); |
Pour le serveur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| while (true)
{
clientSock = sock.Accept();
int receivedBytesLen = clientSock.Receive(clientData);
curMsg = "Receiving data...";
int fileNameLen = BitConverter.ToInt32(clientData, 0);
string fileName = Encoding.UTF8.GetString(clientData, 4, fileNameLen);
BinaryWriter bWrite = new BinaryWriter(File.Open(receivedPath + "/" + fileName, FileMode.Append)); ;
bWrite.Write(clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen);
curMsg = "Saving file...";
bWrite.Close();
clientSock.Close();
} |
Merci l’équipe.