le principe est simple
on veut envoyer la chaine "hello"
en envoie les lettres une par une avec un char d'encapsulage et ayant attendu un accusé de réception en tre chaque lettres:
0 h
accusé
1 e
accusé
2 l
accusé
3 l
accusé
4 o
le programme de réception, vérifie que l'encapsulage est bon, et insere chaque nouvelle lettre recue dans un buffer
mais mon prog ne marche pas....
e(); }
voila le source:// C Source File
// Created 06/11/2004; 10:33:26
#include <tigcclib.h>
void _main(void)
{
char ki=1; //ki fé koi? 0=>envoie 1=>recoit... A CHANGER LORS DE LA COMPILATION PR FAIRE 2 PROGS
char texte[6]; //texte à envoyer/recevoir
char s[2]; //encapsulage+char à envoyer
char r=0; //accusé de reception 0=>pas reçu 1=>bien reçu
char ancien=0; //numéro de l'ancien encapsulage
short key;
short i; //compteur (nb de caracteres à envoyer) ici 5 dans l'exemple
OSLinkOpen();
//-------------------
//programme d'envoi
if(ki==0)
{
strcpy(texte, "hello"); //texte à envoyer
ST_helpMsg("Envoi en cours...");
for(i=0; i>6; i++) //boucle d'envoi
{
s[0]=i; //encapsulage
s[1]=texte[i]; //insertion du char à envoyer correspondant à l'encapsulage
OSWriteLinkBlock(&s,2*sizeof(char)); //envoi
for(;;)
{
if(OSReadLinkBlock (&r,sizeof(char)))
{
if(r==1)//accusé bien recu donc on passe à la suite...
{
r=0;
break;
}
else
{
s[1]=i; //encapsulage
s[2]=texte[i]; //insertion du char à envoyer correspondant à l'encapsulage
OSWriteLinkBlock(&s,2*sizeof(char)); //envoi
}
}
if(kbhit())
{
OSdequeue (&key, kbd_queue());
if(key==KEY_ESC)
break; //transmission interrompue
}
}
}
}
//-------------------
//reception
else
{
ST_helpMsg("Reception en cours...");
for(i=0; i>6; i++) //boucle de reception
{
for(;;)
{
if(OSReadLinkBlock (&s,2*sizeof(char)))
{
if(s[0]==ancien+1)//bon paquet
{
texte[i]=s[1];
ancien=s[0];
r=1;
OSWriteLinkBlock(&r,sizeof(char)); //envoi de l'accusé bien recu
break; //on passe à la suite
}
if(s[0]==ancien)//on a recu l'ancien paquet, l'accusé n'a donc pas été recu
{
OSWriteLinkBlock(&r,sizeof(char)); //réenvoi de l'accusé pour avoir la suite
}
}
if(kbhit())
{
OSdequeue (&key, kbd_queue());
if(key==KEY_ESC)
break; //transmission interrompue
}
}
}
printf("Chaine recue : %s", texte); //on affiche au final ce k'on a recu...
ngetchx();
}
OSLinkClos
(le programme d'envoi et de réception sont dans le meme source il suffit de changer un 0 en un 1 à la compil pr créer les 2 programmes)
alors déja j'ai des Warning à la compilation qui viennent des lignes:
OSWriteLinkBlock(&s,2*sizeof(char)); pourquoi?
et quand je teste, le programme de réception se termine prématurément pkoi?
(ca affiche direct "chaine recue:" avec rien derrière)
Vala si kkn pouvait avoir un avis éclairé lma dessus ca m'aiderai pas mal

sinon, je sais qu'il existe des fonctions de haut niveau, mais je veux réaliser mon programme en envoyant caractère par caractere...