Je construis un programme client-serveur avec c et j'ai des problèmes avec sendina avec un fichier entier avec la fonction send() et recv(). Je dois envoyer le fichier entier avec ceux-ci mais toutes ces fonctions peuvent faire est d'envoyer une chaîne. Le problème principal est l'envoi de l'exe ou d'autres données de format binaire. Devrais-je utiliser htons ou htonl func? Je ne sais pas comment utiliser ceux-ci le long de ceux-ci comme je suis simplement un noob. Je suis coincé avec cela et j'adore votre aide. Merci!!Impossible d'utiliser send() pour envoyer .exe dans la programmation c
Voici la fonction côté serveur recv ::
if (socket_type != SOCK_DGRAM)
{
fi = fopen (final,"wb");
retval = recv(msgsock, recv_buf, strlen(recv_buf), 0);
/*recv_buf[retval] = '\0';
fprintf (fi,"%s",recv_buf);*/
int i;
i=atoi(recv_buf);
char *q;
q=(char *)malloc(i*sizeof(char));
retval = recv(msgsock, q, strlen(q), 0);
//printf ("%s",q);
fwrite(q,i,1,fi);
fclose(fi);
}
else
{
retval = recvfrom(msgsock,recv_buf, sizeof(recv_buf), 0, (struct sockaddr *)&from, &fromlen);
printf("Server: Received datagram from %s\n", inet_ntoa(from.sin_addr));
printf ("SOCK_DGRAM");
}
if (retval == SOCKET_ERROR)
{
fprintf(stderr,"Server: recv() failed: error %d\n", WSAGetLastError());
closesocket(msgsock);
//continue;
}
else
printf("Server: recv() is OK.\n");
if (retval == 0)
{
printf("Server: Client closed connection.\n");
closesocket(msgsock);
//continue;
}
printf("Server: Received %d bytes, data from client\n", retval);
La fonction d'envoi côté client :::
send_command void() { int bytesent; FICHIER * file_out; // file_out = fopen (chemin_fichier, "rb"); char str_all [100000]; // indicateur [30] = "fin"; Send() n'envoie pas de chaîne, il envoie un tableau d'octets.
///////////////////////getsize//////////////
char fsize[5];
int filesize;
file_out = fopen(file_path, "rb");
fseek(file_out, 0, SEEK_END);
filesize = ftell(file_out);
rewind (file_out);
itoa (filesize,fsize,10);
/////////////////////////////////////////////
send (ConnectSocket, fsize, strlen (fsize), 0);
char *r = (char *)malloc (filesize * sizeof(char));
fread(r,filesize,1,file_out);
bytesent = send(ConnectSocket, r, strlen(r), 0);
printf("\nClient: Bytes sent: %ld\n", bytesent);
fclose (file_out);
/*while (fscanf(file_out,"%s",&str_all) != EOF)
{
bytesent = send(ConnectSocket, str_all, strlen(str_all), 0);
printf("\nClient: Bytes sent: %ld\n", bytesent);
//Sleep(500);
}*/
/*printf("%s",flag);
send(ConnectSocket, flag, strlen(flag), 0);*/
WSACleanup();
//return 0;
}
Ceci crée un fichier avec le nom et la taille souhaités mais pas le contenu. C'est le gros problème! C'est aussi pour les fenêtres !! –