#include #include #include #include #include #include #include #include #include #include #include #define SERVERPORT 14675 #define MAXLINE 128 int main(int argc, char *argv[]) { int sockfd; struct sockaddr_in their_addr; struct hostent *he; int i,j,sendline_count,numbytes; int broadcast = 1; unsigned char sendline[MAXLINE]; if (argc != 5) { printf("usage: Model_Name Device_Name Workgroup Firmware_version\n"); exit(1); } if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { perror("socket"); exit(1); } // this call is the difference between this program and talker.c: if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof broadcast) == -1) { perror("setsockopt (SO_BROADCAST)"); exit(1); } their_addr.sin_family = AF_INET; // for IPv4 their_addr.sin_port = htons(SERVERPORT); // Host to Network Short //their_addr.sin_addr.s_addr = INADDR_BROADCAST; //INADDR_BROADCAST address (255.255.255.255) 若有雙網卡, 則須看 route 指定的 0.0.0.0 的 interface //their_addr.sin_addr.s_addr = inet_addr("192.168.100.24"); // 到 192.168.100.24 their_addr.sin_addr.s_addr = inet_addr("192.168.100.255"); // 到 192.168.100.x memset(their_addr.sin_zero, '\0', sizeof their_addr.sin_zero); memset(sendline, 0x0, 71); //分別將 Modelname, DeviceName, GroupName, Version 填入sendline中 sendline_count = 0; for(j=1; j<5; j++) { char tmp[30]; strcpy(tmp,argv[j]); for(i=0; i %s\n",tmp,sendline_count,sendline); } if ((numbytes=sendto(sockfd, sendline, strlen(sendline), 0, (struct sockaddr *)&their_addr, sizeof their_addr)) == -1) { perror("sendto"); exit(1); } shutdown(sockfd, SHUT_RDWR); close(sockfd); return 0; }