参数from是指向本地计算机中包含源I P地址和端口号的数据结构sockaddr的指针。参数fromlen设置为sizeof(struct sockaddr)。
系统调用recvfrom ( )返回接收到的字节数,如果出错则返回- 1。
close() 和shutdown()
你可以使用close( )调用关闭连接的套接口文件描述符:
close(sockfd) ;
这样就不能再对此套接口做任何的读写操作了。
使用系统调用shutdown(),可有更多的控制权。它允许你在某一个方向切断通信,或者切断双方的通信:
int shutdown(int sockfd, int how);
第一个参数是你希望切断通信的套接口文件描述符。第二个参数h o w值如下:
0—Further receives are disallowed
1—Further sends are disallowed
2—Further sends and receives are disallowed (like close())
shutdown() 如果成功则返回0,如果失败则返回- 1。
客户机/服务器模式
在网络上大部分的通信都是在客户机/服务器模式下进行的。例如telnet。当你使用telnet连接到远程主机的端口23时,主机上的一个叫做telnetd的程序就开始运行。它处理所有进入的telnet连接,为你设置登录提示符等。
应当注意的是客户机/服务器模式可以使用SOCK_STREAM、SOCK_DGRAM或者任何其他的方式。例如telnet /telnetd、ftp/ftpd和bootp/bootpd。每当你使用ftp时,远程计算机都在运行一个ftpd为你服务。
一般情况下,一台机器上只有一个服务器程序,它通过使用fork( )来处理多个客户端程序的请求。最基本的处理方法是:服务器等待连接,使用accept()接受连接,调用fork( )生成一个子进程处理连接。
UDP广播模式
广播的用途之一是假定服务器主机在本地子网上,但不知道它的单播IP地址时,对它进行定位,这就是资源发现(resource discovery)。另一用途是当有多个客户和单个服务器通信时,减少局域网上数据流量。下面是几个以此为目的使用广播的因特网应用实例。
★ARP(地址解析协议,address Resolution Protocol。ARP是IPv4的一个基本组成部分,而不是一个用户应用程序。ARP在本地子网上广播一个请求:“具有IP地址a.b.c.d的系统请表明自己,并告诉我,你的硬件地址。”
★BOOTP(引导协议,Bootstrap Protocol)。客户假定有一台服务器主机在本地子网上。它以广播地址(通常是255.255.255.255,因为这是客户还不知道自己的IP地址、子网掩码或子网的受限广播地址)为目的地址发出自己的引导请求。
★NTP(网络时间协议,Network Time Protocol)。一种常见的情形是:一个NTP客户主机可能配置程使用一个或多个服务器主机的IP地址,其上面的NTP客户于是以某个频率(每64秒一次或更长)轮询这些服务器。客户采用基于服务器返送的时刻和到达服务器的往返时间的精确算法更新时钟。但在支持广播的局域网上,就不需要采用客户轮询服务器的方法,而代之以服务器以每64秒一次的频率向本地子网上的所有客户广播当前时刻。这样便可以减少网络上的数据流量。
★路由后台进程。routed是最常用的后台进程。它输出自己的路由表的方法便是局域网广播。所有其他连接到这些局域网上的路由器便可以同时接收这些路由通告,而不用每个路由器都必须配置其邻居路由器的IP地址。这个特性也被局域网上的主机用于侦听路由通告并相应更新它的路由表(许多人认为这是一种“误用”)
如果用{netid,subnetid,hostoid}。({网络Id,子网Id,主机ID})表示IPv4地址,那么有四种类型的广播地址。我们用-1表示所有比特位均为1的字段。
1、子网广播地址:{netid,subnetid,-1}。这类地址编排指定子网上的所有接口。例如,如果我们对B类地址128.7采用8位子网ID,那么128.7.6.225将是128.7.6的子网上所有接口的子网广播地址。
最新相关文章
发表评论