摘要
本课程设计在 Windows 下用 C/C++语言和 socket 编程接口编写两个程序,分别为客户程
序(client.c)和服务器程序(server.c)。包含了 TCP/IP 协议基本通信原理,Winsock 编程基本原
理以及 FTP 工作原理。正文部分是程序设计的具体内容及其源代码,最后是报告反思及总结。
关键字:Winsock, TCP/IP, FTP
2
目录
1 绪论 ....................................................................................................................................4
1.1 设计目的..................................................................................................................4
1.2 设计要求..................................................................................................................4
1.3 设计方案..................................................................................................................4
1.3.1 TCP 服务器端 ....................................................................................................4
1.3.2 TCP 客户端 ........................................................................................................5
2 开发环境 ............................................................................................................................5
3 设计原理 ............................................................................................................................6
3.1 TCP/IP 协议 ................................................................................................................6
3.1.1 网络层协议 .....................................................................................................6
3.1.2 应用层协议 .....................................................................................................6
3.2 Winsock 编程 ..............................................................................................................7
3.2.1 原理 ...................................................................................................................7
3.2.2 流套接字编程模型 ...........................................................................................7
3.2.3 数据报套接字编程模型 ...................................................................................7
3.2.4 Winsock I/O 模型...............................................................................................8
3.3 FTP 工作原理..............................................................................................................8
3.4 Winsock API 基本函数介绍.......................................................................................8
4 总体设计 ..........................................................................................................................10
4.1 Winsock 与操作系统的关系 ....................................................................................10
4.2 功能实现流程图....................................................................................................10
5 实现代码简述 ..................................................................................................................11
5.1 FTP 客户端(client.cpp)........................................................................................11
5.2 FTP 服务器(server.cpp) .......................................................................................15
5.3 客户端界面(Qt 实现).......................................................................................16
6 功能演示 ..........................................................................................................................19
7 心得体会 ..........................................................................................................................23
3
1 绪论
1.1 设计目的
本设计旨在利用原始 socket 简单实现 FTP(File Transfer Protocol,文件传输协议)的客户端
和服务器端程序,能够实现 get、put、pwd、dir、cd 等基本交互命令。
通过完成此设计,了解 Winsock API 函数调用方法和一般网络应用程序的编程方法,理
解 FTP 协议,掌握 C++语言设计 FTP 协议软件的基本技术,为将来开发其他通信协议软件打
下坚实基础。
学会利用已有网络环境设计并实现简单应用层协议,掌握 TCP/IP 网络应用程序基本的
设计方法和实现技巧。
1.2 设计要求
用 socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),该
程序应能实现下述命令功能:
get:获取远方的一个文件
put:传给远方一个文件
pwd:显示远主当前目录
dir:列出远方当前目录
cd :改变远方当前目录
? :显示你提供的命令
quit :退出返回
1.3 设计方案
1.3.1 TCP 服务器端
1. 服务器创建一个套接字
2. 服务器把本地套接字地址绑定(Bind)到该套接字。客户端将使用在这里绑定的套接字
地址来连接到该服务器。
4
3. 服务器将该套接字置为等待状态,监听状态(Listen)。这时该套接字也被称为监听套
接字。
4. 服务器开始接受(Accept)客户端的连接请求。
5. 服务器使用已连接套接字来接受来自客户端的数据,或者发送数据到客户端。
6. 当完成和客户端的数据交互之后,服务器关闭连接套接字。
1.3.2 TCP 客户端
1. 客户端创建一个套接字。
2. 客户端把本地套接字地址绑定到该套接字。(此操作对客户端而言不是必须的)。
3. 客户端使用在步骤 1 创建的套接字来连接到一个远程套接字地址,即服务器的监听
套接字地址。在连接成功后,这个连接将由客户端套接字来描述,这个客户端套接
字也对应一个四元组。此时,这个客户端套接字也成为一个已连接套接字。
4. 客户端使用已连接套接字来发送数据到服务器,或者接受来自服务器的数据。
5. 当完成和服务器的数据交互之后,客户端关闭套接字。
2 开发环境
1. VS2013 编程环境
VS 是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,
如 UML 工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的
所有平台,包括 Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET
Compact Framework 和 Microsoft Silverlight 及 Windows Phone。
2. Qt 5.6.2
Qt 是一个多平台的 C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术
级的图形用户界面所需的所用功能。Qt 是完全面向对象的很容易扩展,并且允许真正地组件
编程。
Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是
非常方便的。 Qt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元
件 之间的协同工作变得十分简单。
5
Qt 包括多达 250 个以上的 C++ 类,还提供基于模板的 collections, serialization,
file, I/O device, directory management, date/time 类。甚至还包括正则表达式的处理功能。
支持 2D/3D 图形渲染,支持 OpenGL 大量的开发文档。
3 设计原理
3.1 TCP/IP 协议
TCP 协议和 IP 协议指两个用在 Internet 上的网络协议(或数据传输的方法)。它们分别是
传输控制协议和互连网协议。这两个协议属于众多的 TCP/IP 协议组中的一部分。
TCP/IP 协议组中的协议保证 Internet 上数据的传输,提供了几乎现在上网所用到的所有
服务。这些服务包括:电子邮件的传输 ,文件传输 , 新闻组的发布 , 访问万维网
在 TCP/IP 协议组分两种协议:网络层的协议和应用层的协议。
3.1.1 网络层协议
网络层协议管理离散的计算机间的数据传输。这些协议用户注意不到,是在系统表层以
下工作的。比如,IP 协议为用户和远程计算机提供了信息包的传输方法。它是在许多信息的
基础上工作的,比如说是机器的 IP 地址。在机器 IP 地址和其它信息的基础上,IP 确保信息
包能正确地到达目的机器。通过这一过程,IP 和其它网络层的协议共同用于数据传输。如果
没有网络工具,用户就看不到在系统里工作的 IP。
3.1.2 应用层协议
相反地,应用层协议用户是可以看得到的。比如,文件传输协议(FTP)用户是看得到
的。用户为了传输一个文件请求一个和其它计算机的连接,连接建立后,就开始传输文件。
在传输时,用户和远程计算机的交换的一部分是能看到的。
TCP/IP 通过使用协议栈工作。这个栈是所有用来在两台机器间完成一个传输的所有协议
的几个集合。(这也就是一个通路,数据通过它从一台机器到另一台机器。)栈分成层,与这
里有关的是五个层。栈的每一层都能从相邻的层中接收或发送数据。每一层都与许多协议相
联系。在栈的每一层,这些协议都在起作用。本章的下一部分将分析这些服务,以及它们在