介绍
节>
这篇文章主要介绍了vxworks中如何实现广播,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。
<>节有了单播和组播,广播也跑不了。广播,广播,与单播的区别就是地址不同。广播用的地址是255.255.255.255;而且广播数据不会被路由器转发,限定于局域网内,否则就是网络风暴了节>
广播的代码其实更简单,直接参考单播和组播的例子写一个
服务器是在单播的基础上略加改动
- <李>
调用套接字()打开一个套接字
李> <李>调用绑定()指定港信息
李> <李>调用setsockopt()加入广播
李> <李>调用recvfrom()阻塞接收
李> <李>最后,调用关闭()关闭套接字
李>
广播客户更简单了
- <李>
调用套接字()打开一个套接字
李> <李>指定广播地址和港信息
李> <李>调用sendto()发送数据
李> <李>最后,调用关闭()关闭套接字
李>
完整代码如下
<节><代码>节> <节>
代码> <代码> # include & lt; stdio.h>,*//* pritnf() 代码> <代码> # include & lt; stdLib.h>,/* malloc() */代码> <代码> # include & lt; sockLib.h>/*套接字()*/代码> <代码> # include & lt; inetLib.h>/*结构指向sockaddr_in */代码> <代码>
代码> <代码> # define HOST_PORT 60000 代码> <代码> # define MIN_SIZE, 10 代码> <代码> # define MIN_TIMES 10 代码> <代码>
代码> <代码>空白broadServer (int, int, int) 代码> <代码>{代码> <代码>,,结构指向sockaddr_in localAddr; 代码> <代码>,,结构指向sockaddr_in peerAddr; 代码> <代码>,int大敌;addrSize=sizeof (struct sockaddr); 代码> <代码>,int大敌;选择=1;代码> <代码>,int大敌;fd; 代码> <代码>,int大敌;num; 代码> <代码>,,char *缓冲;代码> <代码>,,如果(港口,& lt;=2000)端口,=HOST_PORT; 代码> <代码>,,如果(大小,& lt;=0),,大?MIN_SIZE; 代码> <代码>,,如果(* & lt;=0),,乘以=MIN_TIMES; 代码> <代码>,,printf(“祝辞、大小、端口),代码> <代码>,,代码> <代码>,,/*打开插座*/代码> <代码>,,fd=插座(AF_INET SOCK_DGRAM 0); 代码> <代码>,,代码> <代码>,,/*指定本地地址信息*/代码> <代码>,localAddr。sin_family,,,=AF_INET; 代码> <代码>,localAddr。sin_port,,,,=htons(港口);代码> <代码>,localAddr.sin_addr。s_addr=INADDR_ANY; 代码> <代码>,,绑定(fd, (struct sockaddr *), localAddr, sizeof (struct sockaddr)); 代码> <代码>
代码> <代码>,,/*加入广播*/代码> <代码>,,setsockopt (fd, SOL_SOCKET SO_BROADCAST,设置(char *),选择,sizeof (int)); 代码> <代码>
代码> <代码>,,缓冲=(char *) malloc(大小),代码> <代码>,,在((*)在0)代码> <代码>,,,,{代码> <代码>,,,,/*接收广播数据*/代码> <代码>,,,,num=recvfrom (fd、缓冲、大小0 代码> <代码>,,,,,,,,,,,(struct sockaddr *), peerAddr,, addrSize); 代码> <代码>,,,,如果(num & lt;0)打破;代码> <代码>,,,,printf (“broadServer: recv % d % s \ n"字符;,代码> <代码>,,,,,,,,,num inet_ntoa (peerAddr.sin_addr)); 代码> <代码>,,,代码,}> <代码>
代码> <代码>,,/*关闭套接字*/代码> <代码>,,关闭(fd); 代码> <代码>,,免费(缓冲);代码> <代码>,,printf (“broadServer:结束\ n"); 代码> <代码>,,,,}代码> <代码>
代码>
<代码>
代码> <代码> # include & lt; stdio.h>,*//* pritnf() 代码> <代码> # include & lt; stdLib.h>,/* malloc() */代码> <代码> # include & lt; sockLib.h>/*套接字()*/代码> <代码> # include & lt; inetLib.h>/*结构指向sockaddr_in */代码> <代码>
代码> <代码> # define HOST_PORT 60000 代码> <代码> # define MIN_SIZE, 1 代码> <代码> # define MIN_TIMES 1 代码> <代码>
代码> <代码>空白broadClient (int, int, int) 代码> <代码>{代码> <代码>,,结构指向sockaddr_in serverAddr; 代码> <代码>,int大敌;选择=1;代码> <代码>,int大敌;fd;,代码> <代码>,,char *缓冲;代码> <代码>,int大敌;num;,,代码> <代码>,,如果(端口& lt;=2000)端口=HOST_PORT; 代码> <代码>,,如果(大小& lt;=0),代码,大?MIN_SIZE; > <代码>,,如果(times<=0),,乘以=MIN_TIMES; 代码> <代码>,,缓冲=(char *) malloc(大小),代码> <代码>,,(num=0;num<规模;num + +)缓冲区(num)=(num % 26) + & # 39;一个# 39;;vxworks中如何实现广播