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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| int main(int argc, char* argv[])
{
WSAData data;
WSAStartup( MAKEWORD( 2, 2 ), &data );
SOCKET sockfd, sockfd2;
int reuse;
int n,i;
int recvlen;
char buf[BUFSIZE];
struct sockaddr_in recvaddr, sendaddr;
struct ip_mreq {
struct in_addr imr_multiaddr; /* IP multicast address of group */
struct in_addr imr_sourceaddr; /* IP address of source */
struct in_addr imr_interface; /* local IP address of interface */
};
struct ip_mreq group, group2;
printf("Test Mcast - Unicast\n");
//Socket de reception MCast
if ((sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) {
perror("Rx Socket fail\n");
exit(1);
}
// Socket d'émission UDP
if ((sockfd2 = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) {
perror("Tx Socket fail\n");
exit(1);
}
//Init socket in
reuse = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *) &reuse, sizeof(reuse));
setsockopt(sockfd2, SOL_SOCKET, SO_REUSEADDR, (char *) &reuse, sizeof(reuse));
memset((char *)&recvaddr, 0, sizeof(recvaddr));
recvaddr.sin_family = AF_INET;
//recvaddr.sin_addr.s_addr = htonl(INADDR_ANY);
//recvaddr.sin_addr.s_addr = inet_addr("192.168.1.23");
recvaddr.sin_addr.s_addr = inet_addr("172.16.1.1");
recvaddr.sin_port = htons(62000);
bind(sockfd,(struct sockaddr*)&recvaddr,sizeof(recvaddr));
//group.imr_multiaddr.s_addr = inet_addr("239.192.0.5");
group.imr_multiaddr.s_addr = inet_addr("239.101.5.1");
//group.imr_sourceaddr.s_addr = inet_addr("192.168.1.23");
group.imr_interface.s_addr = htonl(INADDR_ANY);
setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) &group, sizeof(group));
//Init socket out
memset((char *) &sendaddr, 0, sizeof(sendaddr));
sendaddr.sin_family = AF_INET;
sendaddr.sin_addr.s_addr = inet_addr("172.16.1.1");
sendaddr.sin_port = htons(60005);
//bind(sockfd2,(struct sockaddr*)&sendaddr,sizeof(sendaddr));
group.imr_multiaddr.s_addr = inet_addr("239.192.0.5");
group.imr_interface.s_addr = htonl(INADDR_ANY);
setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) &group, sizeof(group));
while(1)
{
//sprintf(buf,"Hello\n");
//sendto(sockfd2, buf, 6, 0, (struct sockaddr*) &sendaddr, sizeof(sendaddr));
//printf("Hello\n");
n = recvfrom(sockfd, buf, BUFSIZE, 0, (struct sockaddr *) &recvaddr, &recvlen);
if (n>=1)
{
if((sendto(sockfd2, buf, n, 0, (struct sockaddr*) &sendaddr, sizeof(sendaddr))) < 0)
{
perror("Error Send2 : \n");
exit(1);
}
buf[n] = 0;
//Affichage
for (i=0; i<n; i++)
{
if (buf[i] == 0)
buf[i] = 0x20;
}
printf("Recu: %s\n", buf);
}
}
return 0;
} |
Partager