《网络编程》-第4章 – 基于TCP的服务器端/客户端(1)

1、基于 TCP服务端/客户端函数调用关系

《网络编程》-第4章 – 基于TCP的服务器端/客户端(1)

图4-10的总体流程整理如下:服务器端创建套接字后连续调用bind 、 listen函数进入等待状态,客户端通过调用connect函数发起连接请求。需要注意的是,客户端只能等到服务器端调用listen函数后才能调connect函数。同时要清楚,客户端调用connect函数前,服务器端有可能率先调用accept函数。当然,此时服务器端在调用accept函数时进入阻塞( blocking )状态,直到客户端调connect函数为止。

2、实现迭代服务器端/客户端

《网络编程》-第4章 – 基于TCP的服务器端/客户端(1)

3、习题

1) 请说明TCP/IP的4层协议栈,并说明TCP和UDP套接字经过的层级结构差异?

链路层—>IP层—>TCP层—>应用层

链路层—>IP层—>UDP层—>应用层

2) 请说出TCP/IP协议栈中链路层和IP层的作用,并给出两者关系?

链路层是LAN、WAN、MAN等网络标准相关的协议栈,是定义物理性质标准的层级。相反,IP层是定义网络传输数据标准的层级。即IP层负责以链路层为基础的数据传输

3) 为何需要把TCP/IP协议栈分成4层(或7层)?结合开放式系统回答?

将复杂的TCP/IP协议分层化的话,就可以将分层的层级标准发展成开放系统。实际上,TCP/IP是开放系统,各层级都被初始化,并以该标准为依据组成了互联网。因此,按照不同层级标准,硬件和软件可以相互替代,这种标准化是TCP/IP蓬勃发张的依据

4) 客户端调用connect函数向服务器端发送连接请求。服务器端调用哪个函数后,客户端可以调用connect函数?

listen函数,客户端才可以调用connect函数

5) 什么时候创建连接请求等待队列?它有何作用?与accept有什么关系?

listen函数的调用创建了请求等待队列。它是存储客户端连接请求信息的空间。accept函数调用后,将从本地存储的连接请求信息取出,与客户端建立连接。

6) 客户端中为何不需要调用bind函数分配地址?如果不调用bind函数,那何时、如何向套接字分配IP地址和端口号?

客户端是请求连接的程序,不是一个接收连接的程序。所以,指导服务器的地址信息是更重要的因素,没有必要通过bind函数明确地分配地址信息。但是,要想和服务器通信,必须将自己的地址信息分配到套接字上,因此,在connect函数调用时,自动把IP地址和端口号输入到套接字上。

代码入口