课题名称: TCP/IP 协议及网络编程技术课程设计
子课题 :
实现网络对时程序
院 (系):
计算机学院
专
班
业:
级:
学生姓名:
学
号:
通信工程
hshengxue
指导教师:
周坚和
2012 年 6 月 22 日
目录
- 0 -
摘要………………………………………………………………3
引言………………………………………………………………3
一、课程设计的目的和意义……………………………………3
二、课程设计的内容和要求……………………………………3
三、课程设计所需了解的相关内容和技术……………………4
(一)、 套接口…………………………………………………4
(1) 套接口的概念……………………………………….4
(2) 套接口的分类…………………………………………5
(3) Socket 工作模式………………………………………6
(二)、所用的关键技术…………………………………………6
(三)Winsock API 的使用………………………………………7
四、课程设计过程………………………………………………7
(一)设计思路…………………………………………………7
(1)服务器的主要工作流程…………………………………7
(2)客户机的工作流程………………………………………8.
(3)服务器的工作流程………………………………………8
五、 编程实现…………………………………………………9
(一) 服务器端的实现………………………………………9
(二) 客户端的实现…………………………………………11
六、 小结………………………………………………………15
七、参考文献…………………………………………………16
摘要:
- 1 -
网络应用程序是通过网络使用通信协议实现进程间的通信;本项
目采用软件工程的方法,综合运用网络程序设计,以 visual c++6.0
作为系统前台应用程序开发工具 。此局域网聊天工具采用客户端/
服 务端 (C /S )模 式和 UDP 连 接。 它由 两 个程 序 组成 :服 务 器
(Server)和客户端(Client),首先需要登录服务器,再登录客户端,
需要指定服务器IP地址以便与服务器建立连接。登录后,客户可以
在自己的界面上与另一指的定的客户端进行聊天。服务器模块主要用
来维护网络用户用户的信息,包括用户IP地址,聊天内容;聊天客
户端模块主要包括用户连接,发送信息,接收信息。是一套用于
Internet 网络使用的网络聊天工具,其操作简单,灵活性好,运用
也比较稳定。
关键词:网络,聊天程序,客户端/服务端,UDP 传输控制协议。
0、引言
网络应用程序是通过网络使用通信协议实现进程间的通信,UDP
是 TCP/IP 协议族为传输层设计的两个协议之一,UDP 提供的是无连
接、不可靠的网络传输协议,在进行网络应用程序设计时,TCP/IP
协议的核心内容被封装在操作系统中。网络应用程序要使用 UDP 协议
来实现自己的功能,只能通过由系统提供给用户的 UDP 协议编程接口
来实现。因此,可以说设计网络应用程序就是利用网络编程接口(API)
进行程序设计的过程。在 Windows 环境下的网络应用程序编程接口叫
Windows Sockets,即套接口。
- 2 -
一、课程设计的目的和意义
UDP 是 TCP/IP 协议族为传输层设计的两个协议之一,它在进程
与进程的通信过程中,提供了有限的差错校验功能,是一种无连接的,
不可靠的协议。UDP 在一个较低的水平上完成进程之间的通信,在收
到分组的时候没有流量控制机制也没有确认机制,适用于可靠性比较
高的局域网。由于 UDP 采取了无连接的方式,因此协议简单,在一些
特定的应用中协议运行效率高。UDP 适合一些实时的应用,如 IP 电
话,视频会议,它们要求源主机以恒定的速率发送数据,并且在网络
出现拥塞时,可以丢失一些数据,但是延迟不能太大。基于这些特点,
流式多媒体通信、多播等应用在传输层采用的就是 UDP 协议。因为
UDP 具有 TCP 所望尘莫及的速度优势。虽然 TCP 协议中植入了各种安
全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑
使速度受到严重的影响。反观 UDP 由于排除了信息可靠传递机制,将
安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使
速度得到了保证。
二、课程设计的内容和要求
用 socket 编 程 接 口 编 写 两 个 程 序 , 分 别 为 客 户 机 程 序
(client.cpp)和服务器程序(server.cpp),使用 UDP 传输层协议,
能实现下述功能:客户端能够从服务器端取出标准时间,然后同步本
机时钟。
三、课程设计所需了解的相关内容和技术
- 3 -
(一)、 套接口
(1)套接口的概念
WindowsSockets API 依靠套接口 Socket 进行通信。套接口可
看成是两个网络应用程序进行通信时,各自通信连接中的一个端点。
通信时,其中的一个网路应用程序将要传输的一段信息写入它所在主
机的 Socket 中,该 Socket 通过网络接口卡(NIC)的传输介质将这段
信息发送到另一台主机的 Socket 中,使这段信息能传送到其它程序
中,如图 1 所示。[1]
当主机 A 上的网络应用程序 A 要发送数据时,通过调用数据发
送函数首先将要发送的一段信息写入 Socket 中,Socket 中的内容通
过主机 A 的网络管理软件由主机 A 的网络接口卡发送到主机 B,主机
B 的网络接口卡接收到这段信息后,再传给主机 B 的网络管理软件,
网络管理软件将这段信息保存在主机 B 的 Socket 中,然后程序 B 才
能在 Socket 中读取并使用这段信息。由此看来,Socket 的本质是通
信过程中所要使用的一些缓冲区及一些相关的数据结构。
(2)套接口的分类
为了满足不同的通信程序对通信质量和性能的要求,一般的网
- 4 -
络系统提供了三种不同类型的套接口,以供用户在设计网络应用程序
时根据不同的要求来选择。这三种套接口分别是:
(1)流式套接口(SOCK_STREAM),它提供了一种可靠的、面向连接
的双向数据传输服务,实现数据无差错、无重复地发送。流失套接口
内设流量控制,被传输的数据看作是无记录边界的字节流。在 TCP/IP
协议族中,使用 TCP 协议来实现字节流的传输,当用户想要发送大批
量的数据或者对数据的传输有较高的要求时,使用流式套接口。
(2)数据报套接口(SOCK_DGRAM),它提供了一种无连接、不可靠的
双向数据传输服务。免费论文。数据包以独立的包形式被发送,并保
留了记录边界,不提供可靠性保证。数据在传输过程中可能会丢失或
重复,并且不能保证在接收端数据按发送顺序接收。免费论文。在
TCP/IP 协议族中,使用 UDP 协议来实现数据报套接口。在同一台计
算机上或负载较轻的 LAN 上,因为出现差错的可能性较小,所以可以
使用数据报套接口进行数据传输,这样通信的质量可以得到保证,并
且通信的效率较高。
(3)原始套接口(SOCK_RAW),该套接口允许对较低层协议(如 IP
或 ICMP)进行直接访问,常用于检验新的网络协议实现,也可用于
测试新配置或安装的网络设备。
(3) Socket 工作模式
Socket 以客户/服务器模式工作。Socket 服务器程序通常事先已
经启动,并在一个众所周知的端口监听对服务的请求。Socket 客户
- 5 -
应用程序需要某种服务时,便向提供服务的 Socket 服务器发出请求,
服务器接收到请求后,就响应客户提出的请求。
(二)、所用的关键技术
(1)UDP 协议
UDP 是一个无连接协议,传输数据之前源端和终端不建立连接,
当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把
它扔到网络上。在发送端,UDP 传送数据的速度仅仅是受应用程序生
成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP 把
每个消息段放在队列中,应用程序每次从队列中读一个消息段。
(2)TCP/IP 协议
在 T
C
P
/
I
P 协 议 族 中 , 有 两 个 互 不 相 同 的 传 输 协
议: T C P(传输控制协议)和 U D P(用户数据报协议)。T C P
为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序
交给它的数据分成合适的小块交给下面的网络层,确认接收到的分
组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠
性的端到端的通信,因此应用层可以忽略所有这些细节。而另一方
面, U D P 则为应用层提供一种非常简单的服务。它只是把称作
数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能
到达另一端。任何必需的可靠性必须由应用层来提供。TCP/IP 协议
与 Winsock 网络编程接口
Winsock 规范不是一种网络协议,而是一套开放的、支持多种协议的
- 6 -
Windows 写的网络编程接口。Winsock 可以访问很多种网络协议,可
以把它当作一种协议的封装。现在的 Winsock 已经基本上实现了与协
议无关,可以使用 Winsock 来调用协议的功能
(3)Winsock API 的使用
下面使用 Winsock 进行编程时涉及的主要函数:
WSAStartup 函数、WSACleanup 函数、socket 函数、closesocket 函
数、send(sendto)函数、recv(recvfrom)函数、bind 函数、listen
函数、accept 函数、connect 函数
四、课程设计过程
(一)设计思路
设计 UDP 服务器的过程如下所示。首先,创建又一个 Socket 并监
听。然后启动线程接收数据。用一个链表保存所有连上的客户,并通
知连接成功。这样,客户就有机会处理这一事件并作一些动作。最后,
当客户断开时,向服务器发送一个事件,服务器就可以做一些收尾工
作。其中最关键的部分是收发部分和数据处理部分。
(1)服务器的主要工作流程如图 1 所示:
- 7 -