Concaténation des chaines de caractères non signés en C++

sloumanaw Messages postés 3 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 16 mai 2011 - 22 avril 2011 à 21:33
sloumanaw Messages postés 3 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 16 mai 2011 - 23 avril 2011 à 01:32
Bonjour,

Je cherche un petit programme en C++ qui envoi et reçoit des trames à partir d’une interface Ethernet (soit à l’aide de winpcap ou autre). Svp si quelqu’un dispose d’un code source qui peut m’aider pour gagner du temps et mieux avancer car je suis débutante en C++ et j’ai vraiment besoin de cette partie de programmation afin d’accomplir un autre travail.

Sinon j’essaye entre temps, de coder toute seule en utilisant visual C++ 2010. Mais j’ai encore un petit problème car en codant la couche transport j’ai besoin de construire un paquet UDP donc je dois concaténer l’entête UDP avec le message que je souhaite envoyer.

j’ai pensé à la fonction strcat(chaine1,chaine2) mais ça n’était pas la solution vu que mes variables sont de type caractère non signé et cette fonction permet seulement de concaténer les chaines de caractère signé. Alors j’ai pensé à les mettre dans une structure comme suit

struct packetUDP
{
unsigned short UDPportSrc;
unsigned short UDPportDest;
unsigned short UDPlength;
unsigned short UDPchecksum;
unsigned char Message[500];
};

Est-ce que c’est la bonne solution svp? Sinon comment je fais. Parce que j’ai pensé aussi à la fonction

void * memcpy ( void * destination, const void * source, size_t num );

ma question est peu être débile :( mais J’ai vraiment besoin de votre aide svp. merci pour votre temps.

3 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
22 avril 2011 à 22:04
Signé ou non signé n'entre pour rien dans l'affaire, ce sont toujours des octets.
strcat() traite des chaines qui sont des SUITES D'OCTETS FINISSANT AU 1er zéro rencontré. Dans les paquets UDP il peut fort bien y avoir des octets=ZERO donc exit strcat et autres fonctions de chaine.

On construit un paquet sur:
BYTE *pmem;

BYTE* concatPaquet(BYTE *d, BYTE *data, int n) 
{ 
  int count = n;
  while(--n >0) d[n] data[n]; 
  return (d + count); 
} 


EXEMPLE, concat de 3 blocs sur pmem:
d = concatPaquet(pmem, data1, 12);
d = concatPaquet(d, data2, 60);
d = concatPaquet(d, data3, 20);

A la finale tu feras un
sendto(sock, pmem, DWORD (d - pmem), ...);

ciao...
BruNews, MVP VC++
0
sloumanaw Messages postés 3 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 16 mai 2011
23 avril 2011 à 01:27
merci infiniment!! je vais essayer et je vous mettrai au courant :)
0
sloumanaw Messages postés 3 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 16 mai 2011
23 avril 2011 à 01:32
si j'ai bien combien je dois utiliser un socket client pour envoyer le paquet à la couche suivante qui doit contenir de même un socket serveur?
j'ai cru qu'on n'utilise les sockets que pour communiquer entre deux processus différents(deux ordinateurs..)
0
Rejoignez-nous