#include <stdio.h>

#include <stdlib.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <unistd.h>

#include <string.h>


#define MAXLINE 1023


int main(int argc, char *argv[]){

int send_s, recv_s, n, len;

pid_t pid;

unsigned int yes = 1;

struct sockaddr_in mcast_group;

struct ip_mreq mreq;

char name[10];


if(argc != 4){

printf("using: %s multicast_address port My_name \n", argv[0]);

exit(0);

}


sprintf(name, "[%s}", argv[3]);


memset(&mcast_group, 0, sizeof(mcast_group));


mcast_group.sin_family = AF_INET;

mcast_group.sin_port = htons(atoi(argv[2]));

inet_pton(AF_INET, argv[1], &mcast_group.sin_addr);


if((recv_s = socket(AF_INET, SOCK_DGRAM, 0)) < 0){

printf("error: Can't create send socket\n");

exit(0);

}


mreq.imr_multiaddr = mcast_group.sin_addr;

mreq.imr_interface.s_addr = htonl(INADDR_ANY);

if(setsockopt(recv_s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0){

printf("error: add membership\n");

exit(0);

}


if(setsockopt(recv_s, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) < 0){

printf("error: reuse setsockopt\n");

exit(0);

}


if(bind(recv_s, (struct sockaddr*)&mcast_group, sizeof(mcast_group)) < 0){

printf("error: bind receive socket\n");

exit(0);

}


if((send_s = socket(AF_INET, SOCK_DGRAM, 0)) < 0){

printf("error: Can't create send socket\n");

exit(0);

}


if ((pid=fork()) < 0){

printf("error: fork\n");

exit(0);

}


else if(pid == 0){

struct sockaddr_in from;

char message[MAXLINE+1];

for(;;){

printf("receiving message . . .\n");

len = sizeof(from);

if((n = recvfrom(recv_s, message, MAXLINE, 0, (struct sockaddr*)&from, &len)) < 0){

printf("error: recvfrom\n");

exit(0);

}

message[n] = 0;

printf("Receiced Message: %s\n", message);

}

}


else{

char message[MAXLINE+1], line[MAXLINE+1];

printf("Send Message : ");

while(fgets(message, MAXLINE, stdin) != NULL){

sprintf(line, "%s %s", name, message);

len = strlen(line);

if(sendto(send_s, line, strlen(line), 0, (struct sockaddr*)&mcast_group, sizeof(mcast_group)) < len){

printf("error : sendto\n");

exit(0);

}

}

}

return 0;

}



형님들 형님들 이번에 브로드캐스트 예제 책보고 따라했는데 안됩니다 도와주시옵소서


저 빨간색 부분(브로드캐스트 그룹가입부분)에서 계속 그룹가입이 안댐


구축환경은 유닉스 우분투