linux+广播程序,Linux c UDP广播程序

这个示例展示了如何使用C语言实现UDP套接字进行数据发送和接收。程序包括两个部分:send.c用于向指定IP和端口发送数据,而recv.c则用于在同一IP和端口上接收数据并显示发送者信息。通过键盘输入数据,当输入'quit'时程序终止。
摘要由CSDN通过智能技术生成

send.c

#include

#include

#include

#include

#include

#include

#include

#include

#include

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

{

int socketfd;

socklen_t addr_len;

char buf[64];

struct sockaddr_in server_addr;

if(argc < 3)

{

printf("uasge: %s ip port\n",argv[0]);

exit(-1);

}

if((socketfd = socket(PF_INET,SOCK_DGRAM,0)) < 0)

{

perror("socket");

exit(-1);

}

printf("socketfd = %d\n",socketfd);

int i=1;

socklen_t len = sizeof(i);

setsockopt(socketfd,SOL_SOCKET,SO_BROADCAST,&i,len);

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

server_addr.sin_family = AF_INET;

server_addr.sin_addr.s_addr = inet_addr(argv[1]);

server_addr.sin_port = htons(atoi(argv[2])); addr_len=sizeof(server_addr);

while(1)

{

fgets(buf,64,stdin);

if(sendto(socketfd,buf,64,0,(struct sockaddr*)&server_addr,addr_len) < 0)

{

perror("sendrto");

exit(-1);

}

if(strncmp(buf,"quit",4) == 0)

break;

}

close(socketfd);

return 0;

}

recv.c

#include

#include

#include

#include

#include

#include

#include

#include

#include

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

{

int socketfd;

socklen_t addr_len;

char buf[64];

struct sockaddr_in server_addr;

if(argc < 3)

{

printf("uasge: %s ip port\n",argv[0]);

exit(-1);

}

if((socketfd = socket(PF_INET,SOCK_DGRAM,0)) < 0)

{

perror("socket");

exit(-1);

}

printf("socketfd = %d\n",socketfd);

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

server_addr.sin_family = AF_INET;

server_addr.sin_addr.s_addr = inet_addr(argv[1]);

server_addr.sin_port = htons(atoi(argv[2]));addr_len=sizeof(server_addr);

if(bind(socketfd,(struct sockaddr*)&server_addr,addr_len) < 0)

{

perror("bind");

exit(-1);

}

char name[64];

size_t len = sizeof(name);

gethostname(name,len);

while(1)

{

if(recvfrom(socketfd,buf,64,0,(struct sockaddr*)&server_addr,&addr_len) < 0)

{

perror("sendrto");

exit(-1);

}

if(strncmp(buf,"quit",4) == 0)

break;

printf("host name>%s",name);

printf("from: %s port:%d >%s",inet_ntoa(server_addr.sin_addr),ntohs(server_addr.sin_port),buf);

}

close(socketfd);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值