Linux Socket 学习笔记19-UDP广播服务器端
来源:互联网 发布:软件大道属于哪个街道 编辑:程序博客网 时间:2024/04/28 08:49
Linux Socket 学习笔记19-UDP广播服务器端
在实际的网络应用中,只实现两点之间的的通讯是远远不够的。广播是能够同时实现多点通信的一种模式,这种通讯模式可以同时将信息发布到许多接收端点。
用于广播地址的约定是将IP所有的主机位都设置为1。例如127.255.255.255、192.168.0.255等。
下面是一段服务器的代码,它的作用是每隔4秒广播一次当前时间:
?[Copy to clipboard]View Code C
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
/* srv.c: * Example Stock Index Broadcast : */#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <time.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h> /* * This function reports the error and * exits back to the shell : */static void bail(const char *on_what) { fputs(strerror(errno),stderr); fputs(": ",stderr); fputs(on_what,stderr); fputc('\n',stderr); exit(1);} intmain(int argc,char **argv) { time_t td; int n; char buf[128]; int z; /* Status return code */ int s; /* Socket */ struct sockaddr_in addr_srv;/* AF_INET */ int len_srv; /* length */ struct sockaddr_in addr_bc; /* AF_INET */ int len_bc; /* length */ static int so_broadcast = 1; len_srv = sizeof (addr_srv); len_bc = sizeof (addr_bc); memset(&addr_srv,0,len_srv); addr_srv.sin_port=0; addr_srv.sin_family=AF_INET; addr_srv.sin_addr.s_addr=inet_addr("127.0.0.1"); memset(&addr_bc,0,len_bc); addr_bc.sin_port=htons(9999); addr_bc.sin_family=AF_INET; addr_bc.sin_addr.s_addr=inet_addr("127.255.255.255"); /* * Create a UDP socket to use : */ s = socket(AF_INET,SOCK_DGRAM,0); if ( s == -1 ) bail("socket()"); /* * Allow broadcasts : */ z = setsockopt(s, SOL_SOCKET, SO_BROADCAST, &so_broadcast, sizeof so_broadcast); if ( z == -1 ) bail("setsockopt(SO_BROADCAST)"); /* * Bind a address to our socket, so that * client programs can listen to this * server: */ z = bind(s, (struct sockaddr *)&addr_srv, len_srv); if ( z == -1 ) bail("bind()"); for (;;) { time(&td); strftime(buf,sizeof(buf)," %Y %b %d %H:%M:%S \n",localtime(&td)); printf("%s\n",buf); z = sendto(s, buf, strlen(buf), 0, (struct sockaddr *)&addr_bc, len_bc); if ( z == -1 ) bail("sendto()"); sleep(4); } return 0;}
- Linux Socket 学习笔记19-UDP广播服务器端
- SOCKET 编程 UDP 广播【学习】
- linux socket UDP编程发送广播
- linux socket UDP编程发送广播
- linux UDP 局域网内广播通信服务器端和客户端
- linux UDP 局域网内广播通信服务器端和客户端
- linux UDP 局域网内广播通信服务器端和客户端
- Socket 实现UDP广播
- iOS socket udp 广播
- UDP广播socket实现
- linux网络socket编程服务器端(tcp/udp)
- SOCKET udp 服务器端代码实现
- Socket API实现UDP广播
- c#和UDP SOCKET广播
- c#和UDP SOCKET广播
- Socket API实现UDP广播
- c#和UDP SOCKET广播
- 网络编程--Socket--UDP广播
- setsockopt 设置socket
- 悲催的ubuntu11.10升级
- Handler
- 2 solutions for google map app in android
- source命令与“.”点命令
- Linux Socket 学习笔记19-UDP广播服务器端
- 来自天堂的祝福
- Slide collection
- 四川攻略
- SQL行转列备忘
- 滚蛋疗法祛痘祛斑
- WebSphere
- 来自天堂的祝福
- Linux文件查找命令find,xargs详述