基于 TCP 套接字的文件传输客户服务器程序设计实验报告
本实验报告的主要目的是设计和实现基于 TCP 套接字的文件传输客户服务器程序,从而掌握基于 TCP 套接口的网络程序设计和大规模文件传输的基本方法。
一、实验目的
掌握基于 TCP 套接口的网络程序设计,掌握大规模文件传输的基本方法。
二、实验要求
服务器程序分别实现迭代服务器和并发服务器,使用单进程和 select 的 TCP 服务器。服务器在客户提出请求后向客户发送一个不小于 1M 大小的文件。
三、概要设计
1. 客户程序概要设计:
- 创建 TCP 套接口
- 指定服务器 IP 地址和端口
- 建立与服务器的连接
- 向服务器发送请求传送文件的请求“hello”
- 接受服务传输过来的数据
- 终止程序
2. 迭代服务器概要设计:
- 创建 TCP 套接口
- 捆绑服务器众所周知端口到套接口
- 把套接口变成监听套接口
- 接受客户连接
- 读取客户的请求,发送应答
- 终止连接并等待下一个客户连接
3. 并发服务器概要设计:
- 创建 TCP 套接口
- 捆绑服务器众所周知端口到套接口
- 把套接口变成监听套接口
- 接受客户连接
- 调用 fork() 派生子进程处理连接,父进程等待新的连接请求并处理结束的子进程
- 子进程读取客户的请求,发送应答,数据传输结束后终止连接并退出
4. 使用单进程和 select 的 TCP 服务器概要设计:
- 创建 TCP 套接口
- 捆绑服务器众所周知端口到套接口
- 把套接口变成监听套接口
- 调用 select 初始化数据结构
- 阻塞于 select
- 若监听套接字变为可读,accept 新的连接
- 检查现有连接,若连接可读则读取客户请求,发送应答,数据传输结束后关闭当前连接并更新数据结构
四、详细设计
1. 客户程序详细设计:
- 主要数据结构设计:ipv4 套接字地址结构、字符数组
- 主要函数功能:socket()、connect()、writen()、readn()、close()
2. 迭代服务器详细设计:
- 主要数据结构设计:ipv4 套接字地址结构、字符数组
- 主要函数功能:socket()、bind()、listen()、accept()、writen()、readn()、close()
3. 并发服务器详细设计:
- 主要数据结构设计:ipv4 套接字地址结构、字符数组
- 主要函数功能:socket()、bind()、listen()、accept()、fork()、writen()、readn()、close()
五、结论
通过本实验,我们掌握了基于 TCP 套接口的网络程序设计和大规模文件传输的基本方法,了解了 TCP 套接字编程的基本原理和实现方法,提高了编程能力和解决问题的能力。