#include int Create_destIpSendBrocast(const char *ipaddress,int port,struct sockaddr_in *addrServer){
if(ipaddress==NULL){
return -1;
}
int sockClient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (sockClient<0){
printf ("socket create failed. ip=[%s] \n ", ipaddress);
return -1;
}
int bBroadcast = 1;
if (0 != setsockopt ( sockClient,SOL_SOCKET,SO_BROADCAST, (char *)&bBroadcast, sizeof(int))){
printf ("setsockopt failed. ip=[%s] ", ipaddress);
goto exit0;
}
struct sockaddr_in addrClient = {0};
addrClient.sin_family = AF_INET;
addrClient.sin_addr.s_addr = inet_addr(ipaddress);
addrClient.sin_port = 0; /// 0 表示由系统自动分配端口号
if (0 != bind (sockClient, (struct sockaddr*)&addrClient, sizeof(addrClient))){
printf ("bind failed.ip=[%s] \n", ipaddress);
goto exit0;
}
addrServer->sin_family = AF_INET;
addrServer->sin_addr.s_addr = htonl ( INADDR_BROADCAST );
addrServer->sin_port = htons (port);
return sockClient;
exit0:
close(sockClient);
return -1;
}
void *ThreadProc(void * arg){
char szIp[16] = {0};
strcpy (szIp, (char*)arg);
int nConunter = 0;
struct sockaddr_in addrServer;
int sockClient = Create_destIpSendBrocast((const char *)szIp,10000,&addrServer);
while(1) {
char pcSendMsg[1024] = {0};
time_t rawTime;
time(&rawTime);
struct tm *t = localtime(&rawTime);
sprintf(pcSendMsg, "%04d-%02d-%02d %02d-%02d-%02d | ip=[%s]", t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, szIp);
sendto ( sockClient, pcSendMsg, strlen(pcSendMsg)+1, 0, (struct sockaddr *) &addrServer, sizeof ( struct sockaddr_in ));
printf("%s\n",pcSendMsg);
sleep(1);
}
close(sockClient);
return NULL;
}
int main(void){
char hostname[1024] = {0};
gethostname(hostname, sizeof(hostname)); //获得本地主机名
printf("hostname = %s\n",hostname);
struct hostent * hostinfo = gethostbyname(hostname);//信息结构体
struct in_addr **addr_list;
addr_list = (struct in_addr **)hostinfo->h_addr_list;