begin process at 2010 02 10 15:57:05
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Réseau / Internet

 > 

PING sous protocole TCP


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

PING sous protocole TCP

lundi 16 juin 2003 à 10:11:39 | PING sous protocole TCP

ivdz

Bonjour,

J'ai besoin de votre aide. Je travaille sous C++ Builder 6. Je dois envoyer un message ICMP de Type Echo Request puis récupérer le message ICMP de type Echo Reply associé. Et ceci sous le protocole TCP (et non UDP, en UDP je l'ai déjà fait et ça marche) Bref je dois réaliser un Ping sous TCP sans utiliser ce qui existe déjà.
Je suis totalement débutante en ce qui concerne la programmation réseau (socket .)

Voilà mon code et cela ne marche pas. Mon programme marche partiellement, c'est-à-dire que l'initialisation de winsock2, la création du socket, la connexion au serveur, la construction de la trame ICMP de type Echo Request et l'envoi du message fonctionnent. Après, ça bloque ou ça fait n'importe quoi (si je comment la boucle "do {}while( );") Cela fait des jours que je suis dessus mais je n'avance pas.

Merci d'avance
Isabelle


#define IP_SIZE 20
#define ICMP_SIZE 16
#define MAX_PACKET 100

int main(int argc, char * argv[])
{

WSADATA WSAData;
//Initialisation de Winsock2
if(WSAStartup(MAKEWORD(2,2), & WSAData)!=0)
{perror("WSAStartup"); exit(1);}

char packet_buf[100];
struct sockaddr_in their_addr; // Adresse de celui qui se
connecte
int sock_fd;
//création socket
if ((sock_fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {perror("socket"); exit(1);}

their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(80);
their_addr.sin_addr.s_addr=inet_addr("217.12.3.11");

//connexion au serveur
if (connect(sock_fd, (struct sockaddr *)&their_addr,sizeof(struct sockaddr_in)) == -1) {perror("connect"); exit(1);}

struct icmphdr *icmp_buf=(struct icmphdr *) packet_buf;
//fonction qui construit la trame ICMP de type Echo
//Request
icmp_buf=BuildTrame(icmp_buf);

//envoie d'une requête (ici, message ICMP de type Echo
//Request)
if (send(sock_fd, (char *)icmp_buf, 16, 0) == -1)
{perror("send"); exit(1);}

struct icmphdr * icmp = (struct icmphdr *) malloc(ICMP_SIZE); //allocation mémoire
/* Réception de la réponse ICMP avec l'entête IP */
do
{

fd_set readfds;
FD_ZERO(&readfds);
timeval tv;
tv.tv_sec=5;
tv.tv_usec=0;

FD_SET(sock_fd, &readfds);
if(select(sock_fd+1,&readfds,NULL,NULL,&tv)<0)
{perror("select"); exit(1);}

if(recv(sock_fd, packet_buf, IP_SIZE+ICMP_SIZE, 0)<0)
{perror("recv"); exit(1);}
else {
// Récupération de la partie ICMP du packet
memcpy(icmp, &packet_buf[IP_SIZE], ICMP_SIZE);
}
}while(icmp->type!=0); //ICMP_ECHO REPLY

struct time tps;
gettime((struct time *)&tps);
//Affiche l'heure au moment de la réception du message
//et l'heure contenue dans le message réceptionné et
//calcul leur différence.
double diff=diff_time(&tps,(struct time *)icmp->data);

cout<<"Délais : "<<diff<<" sec. "<<endl<<endl;
}//main
lundi 16 juin 2003 à 16:17:26 | Re : PING sous protocole TCP

roswell117

dsl pour le retard mais j'ai enfin mis ma source pour faire un ping, alors si ca peut t'interesser :

http://www.cppfrance.com/article.aspx?Val=2020
mardi 22 juin 2004 à 14:20:08 | Re : PING sous protocole TCP

valoue

Salut,
Je developpe actuellement une appli Client/Serveur en C++.
J'ai utiliser les socket pour etablir la communication, des threads traitent les demandes des clients au niveau du serveur...
Pour le moment je testais la communication avec des phrases en caractères ("Salut serveur" ... "Salut client" ...).
Maintenant, je veuxpasser à des choses plus serieuses et plus techniques.

Je veux realiser une méthode qui fait un ping depuis le client vers le serveur. Coté client, no pb !! Je me suis aidée du prog que tu as donné (merci d'ailleurs).
Mais côté serveur, il va falloir que j'analyse les trames recues et formuler la reponse.

Je ne vois pas comment foruler la reponse au ping.
Pourrais tu m'aider stp? du moins m'expliquer comment faire, voire me rediriger vers qqchose d'existant ??

Merci bcp !


Valoue
mardi 22 juin 2004 à 14:50:09 | Re : PING sous protocole TCP

valoue

Un question de plus:
est ce le systeme qui doit repondre tout seul au ping du client ou dois je formuler la reponse ?
Valoue


Cette discussion est classée dans : icmp, sock, struct, fd, addr


Répondre à ce message

Sujets en rapport avec ce message

passage de structure a un thread [ par anthonycosson ] bijour tout le monde g un pb qui me blocje voudrai savoir comment passer une structure a AfxBeginThread et récupéré les donner précédement enregistrer "linked error" en C [ par thebadskull ] voila j'ai devc++ sous windows XPj'ai lu un tuto sur comment manier les sockets...voici mon code :void Scann(char buffer[],int port){WSADATA WSAData;W pb pr écouter sur un port... [ par Gendal67 ] Bonsoir all...J'avais envie de créer une application utilisant les sockets liées à une connection TCP/IP qui écoute sur un port précis. Jusque là, pas telechargement d'un fichier sur internet [ par fredleconte ] Salut, Voila j'essaie de telecharger un fichier http mais je ne sais pas comment recevoir le fichier help please. voici le programme: // Download d'u winsock et WSAAsyncSelect [ par lektrosonic ] bonjour, j'ai code deux petites applications (client et serveur) et aux deux g applique la WSAAsyncSelect pour FD_READ, FD_CLOSE , FD_CONNECT (pour le Besoin d'aide sur les Thread Pour Bot MirC [ par nem02004 ] Bon voila g fai un bot mirc et en fai jaimerai lammener en 3 fois car ca va etre un bot dannimanimation ki sera en 3 pseudo ( ki parleron ensemble tot [C] socket [ par sheorogath ] bonjour ,j'essai de me faire une sorte de lib client dans un premier temps pour utiliser les socket mais avec mon code je ne peut me connecter null pa Probleme socket en telnet [ par tigood42 ] Bonjour,je suis en train d'apprendre le fonctionnement des sockets... J'ai créé un serveur qui accepte les multiconnexions simultanément (et bientot a PLEASE REPONDEZ MOI ! ! ! [ par marelo87 ] bonjour, voila je suis en train de programmer ma premiere appli reseau (tte simple)....mais pour me compliquer un peu la tache je voulais faire en sor Documentation Reseaux [ par SnowBlade360 ] Bonjour J'ai trouver sur inernet du code afin de crée une socket mais j'aimerais connaitre exactement tout les champs qui la compose voici mon code :


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,045 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales