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:
J'espère que c'est assez clair comme question.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ; }
Merci!
Partager