Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

impossible de lire 0 depuis le réseau

3 réponses
Avatar
polustanislas
j'ai un client qui envoie un byte = 0.
lorsque mon serveur reçois ça il s'arrête tout simplement

pourriez vous m'aider : voici le code

:--------------main function ----------------------:
>
> ofstream * writepersist = new ofstream
> ((userpath+newid).c_str(),ios::out|ios::app|ios::binary);
>
> int size = 0;
> char c;
> while((int)(c=getchar(s))!=0)
> {
> writepersist->put(c);
> size++;
> }
>
> :----------------getchar implementation--------------:
>
>
> char netaction::getchar(int s)
> {
> char c;
> int error=0;
> int err;
> while(1)
> {
> getsockopt(s,SOL_SOCKET,SO_ERROR,(char*)&err,(unsigned
> int*)sizeof(err));
> if(read(s,&c,1)==1) break;
> if(errno!=0) {error = 1; break; }
> }
> if(error==1)
> {
> shutdown(s,2);
> close(s);
> exit(0);
> }
> return c;
> }
>
>
> :--------------------------:

3 réponses

Avatar
kanze
Stanislas wrote:
j'ai un client qui envoie un byte = 0.
lorsque mon serveur reçois ça il s'arrête tout simplement

pourriez vous m'aider : voici le code

:--------------main function ----------------------:

int size = 0;
char c;
while((int)(c=getchar(s))!=0)
^^^^^^^^^^^^^^^^^^^^^^



C'est normal, non ?

Le getchar du système renvoie un int, afin justement d'avoir une
valeur hors bande pour signaler la fin. Je ne sais pas ce que tu
essaies de faire, mais ça pourrait être une solution possible.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
polustanislas
Il ne faut pas tenir compte de la vérif de la valeur 0 car c'est
lorsque justement je n'utilise pas le byte 0
Bref

j'arrive pas à recevoir et écrire dans un fichier 0 à travers le
réseau

any help ?

merci

Stanislas


(Stanislas) wrote in message news:...
j'ai un client qui envoie un byte = 0.
lorsque mon serveur reçois ça il s'arrête tout simplement

pourriez vous m'aider : voici le code

:--------------main function ----------------------:

ofstream * writepersist = new ofstream
((userpath+newid).c_str(),ios::out|ios::app|ios::binary);

int size = 0;
char c;
while((int)(c=getchar(s))!=0)
{
writepersist->put(c);
size++;
}

:----------------getchar implementation--------------:


char netaction::getchar(int s)
{
char c;
int error=0;
int err;
while(1)
{
getsockopt(s,SOL_SOCKET,SO_ERROR,(char*)&err,(unsigned
int*)sizeof(err));
if(read(s,&c,1)==1) break;
if(errno!=0) {error = 1; break; }
}
if(error==1)
{
shutdown(s,2);
close(s);
exit(0);
}
return c;
}


:--------------------------:




Avatar
Samuel Krempp
le Tuesday 29 March 2005 13:22, écrivit :

Il ne faut pas tenir compte de la vérif de la valeur 0 car c'est
lorsque justement je n'utilise pas le byte 0


euh, quoi ? faut pas tenir compte du code que tu as posté ??
dans ce cas je vois mal où on pourrait voir ce qui va pas..

while((int)(c=getchar(s))!=0)




faut-il comprendre que cette ligne n'est *pas* à prendre en compte, seule ta
fonction getchar l'est ? hmm pourquoi tu l'as postée alors ?
Dans ce cas ça ne dépend pas du code C++ présent mais de l'implémentation
qu'il y a derrière l'entier 'fd'. Vu qu'on en connait rien (à part que
c'est censé être un socket réseau d'après ce que tu nous a dit), je vois
mal ce que tu espères obtenir des lecteurs de ton article..

""""
-j'ai un code, qui utilise un certain socket réseau, le reste n'est que des
détails. Quand la valeur 0 est passée il s'arrête. Que se passe-t-il donc ?
-hmm, la seule chose qu'on peut supposer à partir de ces informations est
que ce socket s'arrête quand la valeur 0 est passée.
-ah d'accord. merci bcp, au revoir !
"""

Bref, à mon avis tu n'as pas assez mûrement réfléchi avant de poster.
Il aurait été plus utile d'envoyer une question plus précisément sur le
socket réseau que tu utilises, et ce dans le forum le plus adapté possible.

--
Sam