linux c socket之局域网广播
来源:互联网 发布:阈值分割算法 编辑:程序博客网 时间:2024/05/27 16:42
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/time.h>
- #include <unistd.h>
- #include <stdbool.h>
- #include <sys/socket.h>
- #include <arpa/inet.h>
- #include <string.h>
- #include "Utility.h"
- //局域网广播发送,配合该工具检测http://download.csdn.net/download/ben395575481/1796582
- static const char * IN6ADDR_ALLNODES="FF02::1";//v6 addr
- int main(int argc, char** argv) {
- //检测参数
- if(argc!=4)
- DieWithUserMessage("param","[4][6] <port> <string to send>");
- in_port_t port=htons((in_port_t)atoi(argv[2]));
- //配置地址结构
- struct sockaddr_storage destStoreage;
- memset(&destStoreage,0,sizeof(destStoreage));
- size_t addr_size=0;
- if(argv[1][0]=='4')
- {
- //使用IP4
- struct sockaddr_in *destAddr4=(struct sockaddr_in*)&destStoreage;
- destAddr4->sin_family=AF_INET;
- destAddr4->sin_port=port;
- destAddr4->sin_addr.s_addr=INADDR_BROADCAST;//广播
- addr_size=sizeof(struct sockaddr_in);
- }else if(argv[1][0]=='6')
- {
- //使用IP6
- struct sockaddr_in6 *destAddr6=(struct sockaddr_in6*)&destStoreage;
- destAddr6->sin6_family=AF_INET6;
- destAddr6->sin6_port=port;
- inet_pton(AF_INET6,IN6ADDR_ALLNODES,&destAddr6->sin6_addr);
- addr_size=sizeof(struct sockaddr_in6);
- }else{
- DieWithUserMessage("Unknown address family",argv[1]);
- }
- //转化为最后的地址
- struct sockaddr *destAddress=(struct sockaddr*)&destStoreage;
- size_t msg_len=strlen(argv[3]);
- if(msg_len>MAXSTRINGLENGTH)
- {
- DieWithUserMessage("string too long ",argv[3]);
- }
- //建立socket
- int sock=socket(destAddress->sa_family,SOCK_DGRAM,IPPROTO_UDP);
- if(sock<0)
- DieWithSystemMessage("socket() failed!");
- int broadcastPerm=1;
- //设置socket允许发送局域网广播
- if(setsockopt(sock,SOL_SOCKET,SO_BROADCAST,&broadcastPerm,sizeof(broadcastPerm))<0)
- {
- DieWithSystemMessage("setsockopt() failed!");
- }
- int i=0;
- for(;;)
- {
- printf("send broadcast %d!\n",i++);
- //循环发送广播数据
- ssize_t numBytes=sendto(sock,argv[3],msg_len,0,destAddress,addr_size);
- if(numBytes<0)
- DieWithSystemMessage("sendto() failed!");
- else if(numBytes!=msg_len)
- DieWithUserMessage("sendto()","sent unexpected number of bytes");
- sleep(3);
- }
- return (EXIT_SUCCESS);
- }
FROM: http://blog.csdn.net/earbao/article/details/16844455
0 0
- linux c socket之局域网广播
- linux c socket之局域网广播
- socket的局域网广播
- socket的局域网广播
- socket的局域网广播
- Delphi用Socket IP/UDP局域网广播
- 用Socket在局域网内进行广播
- 用Socket在局域网内进行广播
- socket之广播
- Socket之广播
- linux c socket之TCPEcho4
- linux c socket之GetAddrInfo
- linux c socket之signal
- Linux下使用RAW SOCKET原始套接字构造UDP原始数据帧广播到局域网,在局域网的另一台计算机上显示UDP发送的信息
- Linux下使用RAW SOCKET原始套接字构造UDP原始数据帧广播到局域网,在局域网的另一台计算机上显示UDP发送的信息
- android 通过局域网udp广播自动建立socket连接
- android 通过局域网udp广播自动建立socket连接
- android 通过局域网udp广播自动建立socket连接
- GitHub Top 100 简介(Objective-C 项目 )
- Spring注入依赖对象
- linux c socket之多路复用:绑定多个端口
- 常用数据结构的时间复杂度
- 链表之判断一个链表是否为回文结构(三)
- linux c socket之局域网广播
- Javascript 严格模式详解
- linux c sockset之多播
- JavaScript作用域学习笔记
- linux网络编程之-----多播(组播)编程
- 多进程 fork之后父子进程 对文件描述符的作用
- JVM学习02-GC算法与种类
- Linux之广播和多播
- 8086键盘输入实验——《x86汇编语言:从实模式到保护模式》读书笔记07