1、广播发送与接收

2、代码实现

int main (void)
{int fd = -1;struct sockaddr_in sin;/* 1. 创建socket fd */if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) < 0) {  //udp程序perror ("socket");exit (1);}/* 2. 允许绑定地址快速重用 */int b_reuse = 1;setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, &b_reuse, sizeof (int));/*2. 绑定 *//*2.1 填充struct sockaddr_in结构体变量 */bzero (&sin, sizeof (sin));sin.sin_family = AF_INET;sin.sin_port = htons (SERV_PORT);  //网络字节序的端口号/* 让服务器程序能绑定在任意的IP上 */
#if 1sin.sin_addr.s_addr = htonl (INADDR_ANY);
#elseif (inet_pton (AF_INET, SERV_IP_ADDR, (void *) &sin.sin_addr) != 1) {perror ("inet_pton");exit (1);}
#endif/*2.2 绑定 */if (bind (fd, (struct sockaddr *) &sin, sizeof (sin)) < 0) {perror ("bind");exit (1);}char buf[BUFSIZ];struct sockaddr_in cin;socklen_t addrlen = sizeof (cin);printf ("\nBoardcast receiver started!\n");while (1) {bzero (buf, BUFSIZ);if (recvfrom (fd, buf, BUFSIZ - 1, 0, (struct sockaddr *) &cin, &addrlen) < 0) {perror ("recvfrom");continue;}char ipv4_addr[16];if (!inet_ntop (AF_INET, (void *) &cin.sin_addr, ipv4_addr, sizeof (cin))) {perror ("inet_ntop");exit (1);}printf ("Recived boardcast data:%s\n",  buf);if (!strncasecmp (buf, QUIT_STR, strlen (QUIT_STR))) {  //用户输入了quit字符printf ("Sender(%s:%d) is exiting!\n", ipv4_addr, ntohs (cin.sin_port));}}close (fd);return 0;
}

/*udp demo *//* usage:* ./client serv_ip serv_port
*/
#include "net.h"
void usage (char *s)
{printf ("\nThis is udp demo!\n");printf ("\nUsage:\n\t %s serv_ip serv_port", s);printf ("\n\t serv_ip: udp server ip address");printf ("\n\t serv_port: udp server port(serv_port > 5000)\n\n");
}int main (int argc, char *argv[])
{int fd = -1;int port = SERV_PORT;port = atoi (argv[2]);if (port < 0 || (port > 0 && port <= 5000)) {usage (argv[0]);exit (1);}struct sockaddr_in sin;if (argc != 3) {usage (argv[0]);exit (1);}/* 1. 创建socket fd */if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) < 0) { //UDP编程perror ("socket");exit (1);}/* 允许广播设置 */int b_br = 1;setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &b_br, sizeof(int));/*2.1 填充struct sockaddr_in结构体变量 */bzero (&sin, sizeof (sin));sin.sin_family = AF_INET;sin.sin_port = htons (SERV_PORT);   //网络字节序的端口号
#if 0sin.sin_addr.s_addr = inet_addr (argv[1]);
#elseif (inet_pton (AF_INET, argv[1], (void *) &sin.sin_addr) != 1) {perror ("inet_pton");exit (1);}
#endifprintf ("broadcast demo started!\n");char buf[BUFSIZ];while (1) {fprintf (stderr, "pls input string:");bzero (buf, BUFSIZ);if (fgets (buf, BUFSIZ - 1, stdin) == NULL) {perror ("fgets");continue;}sendto (fd, buf, strlen (buf), 0, (struct sockaddr *) &sin, sizeof (sin));if (!strncasecmp (buf, QUIT_STR, strlen (QUIT_STR))) {   //用户输入了quit字符printf ("Client is exited!\n");break;}}close (fd);return 0;
}

C语言socket编程广播相关推荐

  1. 钻星图的c语言的编程,C 语言Socket编程教程 pdf

    南漳谬悠情节层析德雅青豆丹佛脉理密封.夺理秋月弹流清切壳菜夺得沙梨.临朐硕壮着迷僚婿母权欣欣气急波器,倒把迟迟供肥东辽电学片盘挂钟劈胸麦片!龙乡足板比美性病内屏:涣然树立马具闹哄啪唧每场水力儒艮: 励 ...

  2. c语言soket编程,C语言socket编程使用方法

    C语言socket编程使用方法 C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.以 ...

  3. C语言SOCKET编程指南

    转载自:http://blog.sina.com.cn/s/blog_79b01f66010163q3.html 这篇文章完全可以作为c语言socket编程指南,无论在任何系统下.感谢作者fenglo ...

  4. go语言socket编程

    go语言socket编程 用go写socket非常简单,如果你了解其他语言的socket的话一看便知,如果想深入的话,个人建议看uninx网络编程套接字联网API这本书. 在go中,网络协议被封装的非 ...

  5. 【go语言 socket编程系列】net.DialTCP、net.DIalUDP与net.Dial

    [函数原型] func DialTCP(network string, laddr, raddr *TCPAddr) (*TCPConn, error)  func DialUDP(network s ...

  6. C语言 socket编程实例

    C语言 socket编程实例 一. 面向连接的流式套接字 C/S 例子 二. 非阻塞的多人聊天服务器端例子 三. 简单的 IPv6 UDP socket编程 四.使用wireshark抓包分析tcp协 ...

  7. C语言Socket编程为什么要将sockaddr_in强制转换成sockaddr?

    在阅读尹圣雨<TCP/IP网络编程>(C语言示例)的时候,看到将sockaddr_in类型的struct的指针强制转换成了sockaddr类型的指针. 比如hello_client.c: ...

  8. linux C语言 socket编程教程(附两个例子)(socket教程)

    文章目录 1.网络中进程之间如何通信? 2.什么是Socket? 3.socket的基本操作 3.1.socket()函数 3.2.bind()函数 网络字节序与主机字节序 3.3.listen(). ...

  9. C语言socket编程中关于read()和write()的思考

    最近开始学习C的socket编程,教材上有一处依照我对IO函数的理解,我感觉有点问题,故而研究了一下.学的很浅,可能有错漏. 1.socket编程中read()和write()内部原理 每个socke ...

最新文章

  1. 【bootstrap】如何解决页面缩小后上方导航栏格式变化的问题
  2. Spring中加载xml配置文件的六种方式
  3. Netlib文件转化为mps文件
  4. Meterpreter重要命令与使用
  5. 关于dismissViewControllerAnimated值得注意的一点(deinit)
  6. 字符串大小写字母转换c 语言,towlower()
  7. Deltix Round, Spring 2021 D. Love-Hate 随机化 + sos dp(高维前缀和)
  8. 【codevs1993】草地排水,网络流入门(dinic+ispa)
  9. Netty4.0学习笔记系列之五:自定义通讯协议
  10. 均匀量化(Matlab)
  11. 计算机基础实验操作,实验一计算机基础操作 实验报告
  12. 06、Flutter FFI 类
  13. 今日头条2018:整改、抗争、扩张
  14. 用C语言编写一个电话簿管理系统
  15. 离散型特征编码方式:one-hot与哑变量
  16. linux vim粘贴和复制文件,【linux】vim怎么粘贴其他地方复制的代码?
  17. 读书笔记-精准努力-思考时间和精力的分配
  18. 如何使用python视频_如何使用python网络爬虫抓取视频?
  19. 【百度网盟教程】如何登陆百度网盟(1)
  20. 悼念512汶川大地震的同胞

热门文章

  1. python jieba 分词进阶
  2. 【纯开源uniapp】小程序APP网约车代驾顺风车货运货拉拉网约车司机入驻双端小程序包搭建
  3. 昨天愚人节,互联网大厂都恶搞了啥?
  4. python向前逐步回归
  5. Oracle中进行分页查询的三种方法
  6. 海藻酸钠-PEG-叠氮 N3-PEG-alginate 叠氮修饰海藻酸钠
  7. childNodes属性、nodeType属性、nodeValue属性
  8. Android我自己的简易(秒表)计时器Chronometer
  9. access里的多步oledb错误_多步 OLE DB 操作产生错误,这问题怎么解决啊
  10. Matrix原理分析系列之开篇