gatorette a écrit :
Apparemment, c'est ton contrôleur ethernet qui gère le stack TCP/IP. De plus, selon la datasheet, il propose une API "proche des sockets Windows".
|
Non ,je ne boucle pas avant d'envoyer le 2° paquet .j'envoie les deux l'un aprés l'autre pdt que la connection est etablie puis ensuite je ferme la connection.
voici le main:
void main()
{
SOCKET i; //c'est un entier qui designe le numero de socket
int len,x;
u_char state;
u_char type;
Init8051(); //initialisation du microcontroleur
initW3100A(); //initialisation du controleur Ethernet
InitNetConfig();// initialisation des parametres réseau
for (i = 0; i < MAX_SOCK_NUM; i++) init_sock(i);
x=0;
while (1)
{
i = 0;
for (i = 0; i < MAX_SOCK_NUM; i++)
{
state=select(i, SEL_CONTROL);//retourne l'etat de la conect°
switch(state)
{
case SOCK_ESTABLISHED : //connection etablie
if ((len = select(i, SEL_RECV)) > 0) //Confirm de reception
{
if (len > MAX_BUF_SIZE)len = MAX_BUF_SIZE;/*When received data more than system buffer,handle as size as buffer*/
len = recv(i, rx_buf, len);
type = ParseReq(rx_buf,x); /* Analyze request*/
len =PrintHeader(tx_buf ,'g'); //le header
switch (type) /* Transfer web page as for each request */
{
case 'g': /* gif processing*/
//1er ENVOIE:
len += MSG_Length(tx_buf + len, 3571);//taille du tablo entier
memcpy(tx_buf +len,tab,1800);//1° envoie on remplie le buf
len += 1800;//la taille de la premiere partie envoyé
len = send(i, tx_buf, len); //on envoie le buf
//2eme ENVOIE:
memcpy(tx_buf,tab,1900);//2° envoie on recrit par dessus le buf
len = 1900;//la taille de la 2° partie envoyé
len = send(i, tx_buf, len); //on envoie la deuxieme partie
break;
}
}
break;
case SOCK_CLOSE_WAIT : /* Terminate connection*/
printf("CLOSE_WAIT : %bd\r\n", i);
close(i); /* SOCKET CLOSE*/
break;
case SOCK_CLOSED : /* Close conneciton*/
printf("CLOSED : %bd\r\n",i);
init_sock(i);
break;
}
} /*for*/
} /* while*/
}
Message édité par rachton le 29-08-2003 à 09:28:42