网络编程部分知识点回顾

Hello,大家好啊。今天我学习了好多代码啊,写下这份博客的目的呢是为了回顾今天学习到的知识点。在下学识尚浅,如有纰漏,还望祝君不吝赐教。

首先我学习了使用alarm来进行网络超时检测,它在现实中并不常用,这个办法只做了解即可。如果要进行网络超时检测,我更推崇用select函数或者setsockopt的方法来实现,这两种方法会更方便些。

在网络超时检测前,我们需要先了解一下下信号的自重启属性。什么是信号的自重启属性呢?alarm 函数可以设置一个时间,当设置的时间到达之后,会给进程发一个 SIGALRM 信号。进程对SIGALRM的默认行为就是终止进程。那么如果想使用 alarm实现超时检测,就不能使用默认的行为让进程终止,也不能使用忽略的方式所以只能使用捕捉的方式。但是问题又来了,使用捕捉的方式处理SIGALRM信号,当进程阻塞等待对方发来数据的过程中,如果出现了超时会立即执行信号处理函数,执行完信号处理函数后,进程会回到产生信号的位置继续向下执行,这种属性叫信号的自重启属性,如果我们想使用alarm实现超时检测,就得关闭信号的这种属性。

所以我们该怎么关闭信号的自重启属性呢?这里就涉及了函数sigaction了。它的功能是获取和设置信号的行为。头文件是#include<signal.h>,函数原型是int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);以下是它的参数和返回值。

 

了解了这个函数后,接下来就让我来写个例子来展示使用SIGALRM来实现网络超时检测。

首先是服务端代码。

 

截图截的不是特别好,还请见谅。接下来是客户端代码。

 

以上便是我敲得代码了,期望各位大佬的斧正。

学习完网络超时检测后,我们学习了组播和广播。

众所周知,数据包只有一个发送者时就是单播,数据包如果能发送给局域网中的所有主机那就是广播。那么,数据包只能发送给局域网中的部分主机就叫组播。广播只能通过UDP协议哦,一个套接字只能发广播,组播,单播中的一种,如果要发全部的,就要建立三个套接字。

那么广播的地址是什么?以192.168.1.0 (255.255.255.0) 网段为例,最大的主机地址192.168.1.255代表该网段的广播地址,发到该地址的数据包被所有的主机接收,255.255.255.255在所有网段中都代表广播地址 。

广播是如何发给所有主机的?

广播的MAC地址比较特殊: FF:FF:FF:FF:FF:FF

广播的IP地址也比较特殊,是 255.255.255.255 或者局域网中最大的IP地址

当交换机收到这样的数据包的时候

看到目的MAC地址是广播的地址,则就会将该数据包发给局域网的所有主机

每台主机都可以收到广播的数据包

链路层:解析目的MAC地址发现是广播的MAC地址,则允许通过

网络层:解析目的IP地址,发现是广播的IP地址,则也允许通过

只要保证传输层指定的端口号没问题,就可以把数据发到对应的应用进程。

下面是我敲得关于广播的代码。

首先是服务端代码。

 

然后是客户端代码。

 

接下来我们来讲一下组播。

由于广播方式发给所有的主机。过多的广播会大量占用网络带宽,造成广播风暴,影响正常的通信。组播(又称为多播)是一种折中的方式。只有加入某个多播组的主机才能收到数据。多播方式既可以发给多个主机,又能避免象广播那样带来过多的负载。

组播的地址是D类IP地址  224.0.0.1~239.255.255.255  就是组播的地址,D类IP地址的每一个都是一个多播组的IP地址。

下面是我敲得关于组播的代码。

首先是服务端代码。

 

接下来是客户端代码。

 

以上便是我今天回顾的内容了,还有很多不足的地方,希望未来能弥补这些不足,知识储备也能变得越来越多。感写你们的观看。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值