以下のコードでメッセージをブロードキャストすると、ホスト マシンのサーバーもメッセージを受信します。ホスト マシンが送信したメッセージを受信しないようにするにはどうすればよいですか?
コードの何かを変更することは可能if (strcmp(hostIP == IP_of_the_package) == 0) { <discard the msg>}
ですか? ホスト マシンは DHCP から IP を取得します。どのように定義hostIP as a variable
し、どのように抽出できIP addr of the packet
ますか?
void boardcast_msg(char *mess){
int sock;
struct sockaddr_in broadcastAddr;
char *broadcastIP;
unsigned short broadcastPort;
char *sendString;
int broadcastPermission;
int sendStringLen;
broadcastIP = "255.255.255.255";
broadcastPort = 33333;
sendString = mess; /* string to broadcast */
if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0){
fprintf(stderr, "socket error");
exit(1);
}
broadcastPermission = 1;
if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (void *) &broadcastPermission,sizeof(broadcastPermission)) < 0){
fprintf(stderr, "setsockopt error");
exit(1);
}
/* Construct local address structure */
memset(&broadcastAddr, 0, sizeof(broadcastAddr));
broadcastAddr.sin_family = AF_INET;
broadcastAddr.sin_addr.s_addr = inet_addr(broadcastIP);
broadcastAddr.sin_port = htons(broadcastPort);
sendStringLen = strlen(sendString);
/* Broadcast sendString in datagram to clients */
if (sendto(sock, sendString, sendStringLen, 0, (struct sockaddr *)&broadcastAddr, sizeof(broadcastAddr)) != sendStringLen){
fprintf(stderr, "sendto error");
exit(1);
}
}