RECV() TELNET

kiki67100 Messages postés 313 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 10 août 2013 - 28 juin 2007 à 17:51
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 - 28 juin 2007 à 23:55
Bonjour j'ai fait un serveur en c++ Mais le probleme c'est que mon code lit le recv() de telnet caractere par caractere et moi je voudrais phrase par phrase voici le code

#include <winsock2.h>
#include <windows.h>
#include

bool Insocket(long PORT)
{

WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKET csock;
SOCKET cs;
SOCKADDR_IN sin;
SOCKADDR_IN csin;
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr            = INADDR_ANY;
sin.sin_family        = AF_INET;
sin.sin_port                = htons(PORT);
bind(sock, (SOCKADDR *)&sin, sizeof(sin));
listen(sock, 0);
char *msg=new char[1];
while(1)
{
int sinsize = sizeof(csin);
 cs=accept(sock,NULL,NULL);
 if (cs!=INVALID_SOCKET){
printf("Connection=>\n");
send(cs, "", 1, 0);
while ((recv(cs,msg,1,0))>0){
printf(msg);

}
}
}

}
int main()
{
Insocket(1000);
}

Le code m'affiche dans un printf de recv() donc caractere par caractere .Donc faire un while((*msg != '\n') Je sais pas comment mis prendre Jespere que vous pouriez maidé

Merci

Kevin

5 réponses

rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
28 juin 2007 à 18:08
deja : printf(msg); soit on n'a pas le meme c soit ce serait plutot printf("%c",msg[0]); ..
ensuite exprime clairement ton idee et tu trouveras :

"comment en ayant une fonction qui recoit caractere par caractere puis je lire phrase par phrase"

reflexion ... reflexion

il suffit de stocker les caracteres et lire la totalite de la chaine au moment opportun
( pas dur tout de meme .. )

conclusion :

( tu dis faire du c++ je te met donc des vector .. #include<vector>)

std::vector<char>msg;
msg.push_back(0);
 
while( recv(cs , msg[msg.size()-1] , 1 , 0 ) )
{
  if( msg[ msg.size()-1 ] == '\n')
    {
       //message recu
       msg.clear();
    }

   msg.push_back(0);   
}

voila ..

rrk275
0
kiki67100 Messages postés 313 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 10 août 2013 1
28 juin 2007 à 18:43
Désolé pour mavoir mal exprimé et merci pour ton aide Juste un dernier truc
Dev c++ me mais comme erreur 35 C:\Dev-Cpp\code.cpp invalid conversion from `char' to `char*'

Dans cette ligne while( recv(cs , msg[msg.size()-1] , 1 , 0 ) )

Merci

Kevin
0
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
28 juin 2007 à 19:48
Je suis pas le plus grand expert de l'histoire de l'humanité mais je dirais plutôt de prendre un tableau plutot qu'un vector car c'est un peu lourd à mon avis pour une opération quand même assez simpliste. Utiliser strstr() pour savoir quand le retour à la ligne arrive tout simplement et continuer d'accumuler dans le buffer si le retour est non trouvé. C'est ce que je fais et sa réussis assez bien .. :P
0
kiki67100 Messages postés 313 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 10 août 2013 1
28 juin 2007 à 20:19
Ok merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
28 juin 2007 à 23:55
Je ne vois pas trop l'interet du strstr quand au tableau on ne connait pas sa taille a l'avance ...

m'enfin tout depend de ce que l'on a compris du probleme ...

Pour kiki67100 il te dit que tu passes un nombre au lieu d'un pointeur ... un pointeur c'est une adresse, qui te permet de stocker donc d'ecrire pour transformer en pointeur ajoute & devant...
Louis
0