Problême de communication en UDP
Normalement, je chercherais moi-même la solution à ce problème, mais j'ai un problème de sciatique qui m’empêche d'être assis trop longtemps devant un ordi, alors pardonnez ma question.
Le problème, c'est que je communique en UDP avec un bidule (sur lequel je n'ai aucun contrôle) qui me répond sur le port que j'utilise pour la transmission, qui n'est pas celui que j'utilise pour la réception.
C'est que, dans mon code, le port utilisé pour la transmission est alloué par Windows et varie pour chaque trame transmise (2013,2014,2015...).
Idéalement, il faudrait que je puisse "tromper" celui qui reçoit en modifiant l'information du port qui a été utilisé pour la transmission pour qu'il corresponde à celui que j'utilise pour la réception.
Sinon, il faudrait que je puisse fixer moi-même le port de transmission. Je sais que ça se fait, mais je sais pas trop comment. Mais je ne suis pas certain que je pourrais utiliser le même port UDP pour la transmission et la réception.
Voici le code de la fonction que j'utilise présentement:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
bool TUdpSockit::Send(AnsiString ipAddr, int port, const void* data, int count)
{
// Créer un socket
SOCKET txSocket;
txSocket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
if (txSocket==INVALID_SOCKET)
{
fErrorMes = MES_TX_SOCKET_ERR ;
return false ;
}
// Spécifier l'adresse du destinataire
sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr(ipAddr.c_str());
clientService.sin_port = htons(port);
// connexion au serveur
if( connect(txSocket, (SOCKADDR *) & clientService,
sizeof (clientService)) == SOCKET_ERROR)
{
fErrorMes = MES_TX_CONNECT_ERR ;
return false ;
}
// Transmet données (blocking mode)
send(txSocket,(const char*)data,count,0) ;
// ferme socket
closesocket(txSocket);
return true ;
} |
J'espère que c'est assez clair comme question.
Merci!