TELNET aide sur RECV ?

cs_hergo Messages postés 5 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 12 avril 2006 - 15 juin 2004 à 00:25
roswell117 Messages postés 61 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 18 novembre 2005 - 15 juin 2004 à 14:40
bonjour jai besoinr daide ssur mon serveur telnet :

Je suis sous NT en language C/C++ avec Borland builder X

quand je le lance tout fonction , il attend la connexion dun client , si il arrive il affiche l'ip sur la consol du serveur.

Maintenant mon probleme ce situe au niveau du client :

jutilise comme client : TELNET de windows

je lui envoi sans probleme une question ...
elle s'affiche !

mais pour la reponse : client -> serveur ! ca ne marche pas.

c'est a dire quil ne me laisse pas frapper ma reponse ...
Il passe directement a la ligne d'apres !

voici mon code :

#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#define send(coco,caca) send(coco,caca,strlen(caca),0)
#define recu(toto, titi, tata) recv(toto, titi, tata, 0)

int main(void)
{
char loginr[80] = "";
char loginok[80] = "Hergo";
int len = 4096;

SOCKET s;
SOCKET c;
sockaddr_in sin;
WSAEVENT EventClose = WSACreateEvent();

WSADATA wsa;
WSAStartup(MAKEWORD(2,0), &wsa);

s = socket(AF_INET, SOCK_STREAM, 0);

sin.sin_family = AF_INET;
sin.sin_port = htons(23);
sin.sin_addr.S_un.S_addr = INADDR_ANY;

bind(s,(sockaddr *) &sin, sizeof(sin));
listen(s, 5);

int SinSize = sizeof(sin);

c = accept(s, (sockaddr *) &sin, &SinSize);
WSAEventSelect(c, EventClose, FD_CLOSE);
printf("connection accepte\n");
printf(inet_ntoa(sin.sin_addr));

start:

send ( c," # Entre Ton Login:");

recu(c, loginr, len); /// c'est ICI que ca plante ... il passe directement en dessous !!!! il n'attend pas la reponse

if (strcmp(loginr, loginok)) {
send (c, " Login Incorrect." );

goto start;

}
else {
send (c," ok !!!!");
}

WSAWaitForMultipleEvents(1, &EventClose, FALSE, WSA_INFINITE, FALSE);
printf("connection perdue\n");
return 0;
}

Merci de bien vouloi repondre et m'aider c vraiment important !!!!!

jai essayer aussi de mettre MSG_WAITALL dans RECV ca marche pas non plus !

jai essayer aussi avec une boucle while trouver dans Bubsock !!!

ca ne marche pas !

jai aussi penser que ca pourai etre TELNET qui nattend pas de reponse !!!

je suis perdu !!!!

aidez moiiii

merci.

1 réponse

roswell117 Messages postés 61 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 18 novembre 2005
15 juin 2004 à 14:40
petite adaptation d'un morceau de code en C contenant la fonction "select" qui devrait te convenir :

fd_set fdsr;
struct timeval tv_timeout;
int findelai, tpslimite;

FD_ZERO(&fdsr);
FD_SET(c, &fdsr);
tv_timeout.tv_sec = tpslimite;
tv_timeout.tv_usec = 0;

findelai = 0;
do
{
   if (select(c+1, &fdsr, NULL, NULL, &tv_timeout) <= 0)
   {
   // Dans le cas où le temps est écoulé, on veut sortir de la boucle
   printf("D\202lai d'attente depass\202.\n");
   findelai = 1;
   }
            
   if (FD_ISSET(c, &fdsr))
   {
   // Dans le cas où le buffer du socket contient des données
   recu(c, loginr, len);
   }
}while(findelai == 0);


il y a peut-etre des erreurs avec tes variables, ca ete adapte a la va-vite.
pour la version originale :http://www.cppfrance.com/code.aspx?ID=10926
0
Rejoignez-nous