文档章节

Linux c UDP广播程序

screenman
 screenman
发布于 2012/08/07 21:03
字数 290
阅读 4902
收藏 4

send.c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
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<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
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;
}

© 著作权归作者所有

screenman
粉丝 7
博文 21
码字总数 6858
作品 0
郑州
程序员
私信 提问
加载中

评论(4)

s
swing07
LZ 你好 你的发送广播 我在win下 收不到 不知道 为什么
h
huguohu
不知道楼主有没有测试过这个程序,我测试过是不能收到广播的。而且recv.c中这段代码
if(recvfrom(socketfd,buf,64,0,(struct sockaddr*)&server_addr,&addr_len) < 0)
是不是有问题。
screenman
screenman 博主

引用来自“leehark”的评论

广播IP地址不是特定的么,为什么从命令行获取呢

对的,不一定非得在运行的时候输入,你可以在程序中直接写上 。这样是因为换个网段就直接在运行时写上当前网段的最大主机地址就行,不用再修改程序
leehark
leehark
广播IP地址不是特定的么,为什么从命令行获取呢
103-使用广播的 UDP 回射客户端

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q1007729991/article/details/72821160 讲了好几篇有关广播的理论,是时候实践一下了。这一次,需要将之前写的...

--Allen--
2017/05/31
0
0
0-Linux 网络编程修炼指南——内功心法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q1007729991/article/details/69091877 学习交流群: Linux 学习交流群 610441700 说明:本系列文章并不能取代...

--Allen--
2017/04/04
0
0
Python网络编程笔记(一):UDP

IP层需要解决两个问题: 通过多路复用,区分不同应用程序的数据包 通过可靠传输,修复错误 两个主要协议:用户数据包协议(UDP)、传输控制协议(TCP),UDP用端口多路复用,解决问题一。TCP...

郝开心信札
2018/05/31
0
0
linux系统命令工具之netstat

netstat是一个查看系统网络连接状态的命令工具,可以查看所有网络相关的信息 比如,在wdOS或wdcp一键包里,有时网站,后台打不开时,就可以在SSH连接用netstat来查看下端口状况,比如 netstat -lnp...

wdlinuxcn
2012/08/01
0
0
netstat的用法

功能说明: netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。 语 法: netstat [-acCeFghilMnNoprstuvVwx][-A][--ip] 补充说明: 利用netst...

整理秀逗的脑袋
2011/12/05
3.1K
6

没有更多内容

加载失败,请刷新页面

加载更多

零基础学画画应该从哪开始?

零基础学画画应该从哪开始?一种是从小有兴趣,喜欢涂鸦,喜欢将自己的创意和想法表现出来;另一种是长大后审美提高,开始对绘画艺术感兴趣,从而开始从零基础学起。 推荐大家可以搜一下:轻微...

设绘嗨
16分钟前
2
0
你编写的程序高效、优雅吗?阿里架构师教你编写高效优雅Java程序

面向对象 构造器参数太多怎么办? 用 builder 模式,用在 1、5 个或者 5 个以上的成员变量 2、参数不多,但是在未来,参数会增加 Builder 模式: 属于对象的创建模式,一般有 1. 抽象建造者:...

kx33389
21分钟前
1
0
PDF 文档操作Java类库Spire.PDF for Java v2.7.6发布上线!| 附下载

Spire.PDF for Java是一款专门对 PDF 文档进行操作的 Java 类库。该类库的主要功能在于帮助开发人员在 Java 应用程序(J2SE和J2EE)中生成 PDF 文档和操作现有 PDF 文档,并且运行环境无需安...

mnrssj
29分钟前
1
0
初探云原生应用管理(二): 为什么你必须尽快转向 Helm v3

在研究了一番“开放云原生应用中心(AppHub)”之后,程序员小张似乎已经明白了“云原生应用”到底是怎么一回事情。 “不就是 Helm 嘛!” 这不,小张这就准备把自己开发多年的“图书馆管理系...

zhaowei121
33分钟前
0
0
「工具」三分钟了解一款思维导图工具:XMind Zen

一款非常实用的商业思维导图软件,融合艺术与创造力。致力于高效的可视化思维,强调软件的跨平台使用,帮助用户提高生产效率。 相关信息 · 操作系统:macOS / Windows / Linux · 官方网站:...

极光推送
34分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部