套接字在网络编程中的作用是什么?为何称它为套接字?
- 套接字是网络数据传输用的软件设备。
- 编程中的’套接字’就是用来连接该网络的工具。
在服务器端创建套接字后,会依次调用 listen 函数和 accept 函数。请比较并说明两者的作用。
- 调用 listen 函数将套接字转为可接受连接状态。
- 调用 accept 函数受理连接请求。如果在没有连接请求的情况下调用该函数,则不会返回,直到有连接请求为止。
Linux 中,对套接字数据进行 I/O 时可以直接使用文件 I/O 相关函数;而在 Windows 中则不可以。原因为何?
- 在 Linux 世界里,socket 也被认为是文件的一种,因此在网络数据传输过程中自然可以使用文件 I/O 的相关函数。
- Windows 则与 Linux 不同,是要区分 socket 和文件的。因此在 Windows 中需要调用特殊的数据传输相关函数。
创建套接字后一般会给它分配地址,为什么?为了完成地址分配需要调用哪个函数?
- 创建套接字分配地址,才能和其他端建立联接。
- 调用 bind 函数给创建好的套接字分配地址信息(IP 地址和端口号)。
Linux 中的文件描述符与 Windows 的句柄实际上非常类似。请以套接字为对象说明他们的含义。
- 每当生成文件或套接字,操作系统将返回分配给他们的整数。
- 实际上,文件描述符只不过是为了方便称呼操作系统创建的文件或套接字而赋予的数而已。
- 文件描述符有时也称为文件句柄,但句柄主要是 Windows 中的术语。所以在 Windows 系统中使用“句柄”,在 Linux 上使用“描述符”。
底层文件 I/O 函数与 ANSI 标准定义的文件 I/O 函数之间有何区别?
- Linux 中套接字也是文件,因而可以通过文件 I/O 函数 read 和 write 进行数据传输。
- 而在 Windows 中严格区分文件 I_O 函数和套接字 I_O 函数。
参考本书给出的示例 low_open.c 和 low_read.c,分别利用底层文件 I/O 和 ANSI 标准 I/O 编写文件复制程序。可任意制定复制程序的使用方法。