linux socket 如何发送分组广播
来源:互联网 发布:js正则表达式判断空格 编辑:程序博客网 时间:2024/06/05 20:10
网上也看到了很多但感觉解释的不全面,在这里我也说一下我自己的摸索结果
下面还是先看一下代码 基本和网上搜到的一样
初始化
static struct sockaddr_in remote_addr;//远程地址
static struct sockaddr_in local_addr;//若本地要帮定端口要用
memset(&remote_addr,0,sizeof(remote_addr));
remote_addr.sin_family = AF_INET;
remote_addr.sin_addr.s_addr = inet_addr("225.100.1.6");//广播地址
remote_addr.sin_port = htons(6789); //目的端口
memset(&local_addr,0,sizeof(local_addr));
local_addr.sin_family = AF_INET;
local_addr.sin_addr.s_addr =htonl(INADDR_ANY);
local_addr.sin_port = htons(4321); //本地发送端口4321
if( (sockfd=socket(AF_INET,SOCK_DGRAM,0))<0 )
{
BROADCAST_PRINT(( "can't open datagram socket rtn=%d/n", sockfd));
}
else
{
bind(sockfd,(struct sockaddr *)&local_addr,sizeof(local_addr) );
//若要绑定本地端口加上这一句
}
发送语句
if(sendto(sockfd,data,cur_pkg_num,0,(struct sockaddr *)&remote_addr,sizeof(remote_addr))<0)
{}
代码是没有什么好说的了,下面说一下几个问题
1。仅仅凭上面代码发送返回肯定要失败的,应为还没有添加分组广播的路由
在linux命令行中运行 route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
2。还有就是看到一些人提到本地发送端口绑定的问题
对于一次发送数据小于网络14xx(具体忘了)限制的包,用抓包程序可以看都没个包的端口
都是一样的,但包如果很大,系统会自动分包,一些抓包程序就会看到其他端口,但被拆的包
中一定有一个是指定的端口号的。具体为什么还没有搞懂,但对于上层程序应该不会出问题。
- linux socket 如何发送分组广播
- linux socket UDP编程发送广播
- linux socket UDP编程发送广播
- linux下发送广播
- linux下发送广播
- linux下发送广播
- linux下发送广播
- Nodejs socket.io 实现私聊:如何给指定客户端发送消息,不是群广播
- Nodejs socket.io 实现私聊:如何给指定客户端发送消息,不是群广播
- Go如何发送广播包
- Android--socket 发送广播的那些坑
- 如何快速有效的发送一个广播
- android中如何发送一个广播
- android中如何发送一个广播
- android中如何发送一个广播
- 网络通信之如何广播发送
- Android如何在局域网中发送广播
- Linux下发送全网广播报文
- 找寻爱的过程
- 爱情需要项目管理
- 唯女人 .
- linux下rails 安装日志
- VC++6.0 中用 ADO 存取 Access 数据库
- linux socket 如何发送分组广播
- JSP写数据库乱码问题
- VC6+STLport-5.1.0编译log4cpp-0.3.4b
- 使用CScrollView创建滚动条
- Regedit与Regedt32
- 通过ado.net实现事务处理
- 嵌入式的发展~!
- 喜欢的网址
- JAVA模式学习:依赖倒转原则(Dependence Inversion)(一)