linux 多网卡发送,linux 多网卡发送udp广播

#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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值