Probleme du bind de des sockets en c
Bonjour, je programme un sender et un receiver et entre eux j'ai un midum qui fait le bind entre ces deux..
le medium ce lance comme suite: ./medium port_medium ip_receiver port_receiver ip_sende port_send err1 err2 err3
err1, ..3 c la probabilité de toucher les données qui passe dans le medium.
le medium crée deux bind pour ces deux sockets de communucation.
mon probleme est le suivant:
comme mon sender et receiver peur recevoir et enoyer des données sur leurs deux sockets,
donc j'ai crée deux bind un dans le sender et un autre dans le receiver.
quand je lance le sender: ./ port_sender ip_medium port_medium message
il me dit erreur dans le bind, alors qu'il faut avoir le même (port sender) chez le medium et le send , et c'est pareil avec le receiver..
donc je ne comprend pas ce refus d'attacher les sockets sender et receiver.
merci
exemple
sender.c
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
int main(int argc, char **argv)
{
int ReadFile, taille,sockfd;
char message[MAX_MESSAGE];
char *ip = "127.0.0.1";
struct sockaddr_in medium,sender;
// taille d'une structure sockaddr_in utile pour la fonction recvfrom
socklen_t fromlen = sizeof(struct sockaddr_in);
if(argc != 5)
{
printf("Usage : %s porr_sender ip_medium port_medium message à envoyer\n", argv[0]);
exit(-1);
}
// creat the socket
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
sender.sin_port =htons(atoi(argv[1]));
//Initialised the structure sender
sender.sin_family =AF_INET;
sender.sin_port =htons(atoi(argv[1])) ;
inet_aton(ip, &(sender.sin_addr));
//Initialised the structure medium
medium.sin_family = AF_INET;
inet_aton(argv[2], &(medium.sin_addr));
medium.sin_port =htons(atoi(argv[3]));
// association de la socket et des param reseaux du recepteur
if(bind(sockfd, (struct sockaddr *)&sender,fromlen)==-1)
{
perror("erreur lors de l'appel a bind -> ");
exit(-2);
}
printf("L'envoyeur est pret...\n");
//-- Transmission of data
if(SendScureUDP(sockfd,argv[4],strlen(argv[4]), medium)!=0)
{
perror("erreur à l'appel de la fonction SendSecure -> ");
exit(-2);
}
//-- End of transmission
printf("Emission terminee.\n");
//DisconnectRequest(desc_sock, adresse_dist);
//close(desc_sock);
return 0;
} |