Bonjour,
Je suis sous dev-c++ et je fais un programme qui utilise winsock.
J'ai un probleme au niveau de la réception de commandes :
lorsque je recois beaucoup de données simultanément, mon programme crash, sans message d'erreur, il se ferme.
Puisque lorsque le nombre decommandes est trop grand, la dernière commande se retrouve coupée en 2, j'ai décidé de faire ceci :
char tmpwait[2005];
unsigned long i;
char *mid(char *texte, unsigned int depart, unsigned int fin)
{
static char res[80];
if(depart < 0) depart = 0;
if(fin > strlen(texte)) fin = strlen(texte);
strncpy (res, texte + depart , fin - depart);
res[fin - depart] = '\0';
return res;
}
void sckread()
{
char *cmd, buf[4015];
unsigned int len;
if(strlen(tmpwait))
{
char buff[2005];
len = recv(sock, buff, 2000, 0);
buff[len] = '\0';
strcpy(buf, tmpwait);
strcat(buf, buff);
tmpwait[0] = '\0';
GlobalFree(&tmpwait);
}
else
{
len = recv(sock, buf, 2000, 0);
buf[len] = '\0';
}
if(strcmp(mid(buf, strlen(buf)-1, strlen(buf)), "¦"))
{
i = strlen(buf); while(buf[i] != '¦') i--;
strcpy(tmpwait, mid(buf, i+1, strlen(buf)));
char tmptobuf[2005];
strcpy(tmptobuf, mid(buf, 0, i+1));
strcpy(buf, tmptobuf);
}
// ...
}
Je m'explique.
'¦' est mon caractère de séparation, il se trouve a la fin de chaque commande.
Ici, lorsque le dernier caractère n'est pas un caractere de séparation (la derniere commande est incomplète), je stocke donc la 1ere partie de cete commande dans la variable globale TMPWAIT.
A la prochaine reception (lorsque je recois la 2eme partie de la comande), ce systeme recolle la 1ere partie d ela commande a la 2eme ainsi reçue.
Mon problème est que ce système ne fonctionne pas.
Le prog plante lors de la reception de données de taille supérieure à 2000. Il n'y a aucun message d'erreur et le prog se ferme :s.
Si quelqun pouvait m'indiquer comment remédier a ce plantage ou un autre systeme de reception plus fiable, cela m'aiderait onsidérablement.
Merci d'avance a tous et bonne année.