RECV() TELNET

Signaler
Messages postés
318
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
10 août 2013
-
rrk275
Messages postés
542
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
-
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

Messages postés
542
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
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
Messages postés
318
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
10 août 2013
1
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
Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014

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
Messages postés
318
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
10 août 2013
1
Ok merci
Messages postés
542
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
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