Ce code envoie et recv fichier s txt parfaitement, mais ne peut pas le faire à d'autres formats comme .exe ou .img. S'il vous plaît aidez-moi avec ceux-ci comme j'ai besoin d'utiliser htonl ou htons ?? Jetez un oeil !!Recv() fonctions indicateur pour prendre le tampon while dans une chaîne [Windows C]
fonction recv côté est le serveur ici ::
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);
The client side sending function :::
void send_command()
{
int bytesent;
FILE *file_out;
//file_out = fopen(file_path,"rb");
char str_all[100000];//flag [30]="end";
///////////////////////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;
}
L'allocation est un problème que j'ai trouvé mais je suis vraiment noob à ce sujet et l'apprends comme 2 semaines maintenant. Htons est une solution à laquelle je pensais mais que je ne peux pas appliquer. Merci d'avoir répondu!! –
Si allocation est un problème, vous pouvez utiliser un tableau comme je l'ai dit, mais à long terme, vous devriez apprendre des pointeurs et malloc et amis en C. Pour le réseautage, il existe de nombreux bons tutoriels en ligne, ou vous pouvez lire les livres de Stevens . –