网络编程
课程设计说明书
设计题目
基于 TCP/IP 的网络文字聊
天程序设计
专业:网络工程
班级:网络 1301 班
姓名:
学号:**********
时间:2015.12.23
目录
一、
课程设计题目............................................................................................... 1
二、
设计要求....................................................................................................... 1
(一)
对设计方法的要求............................................................................ 1
(二)
对设计内容的要求............................................................................ 1
(三)
设计思路与开发过程........................................................................ 1
三、
设计原理及 Socket 套接字 ......................................................................... 1
(一)
设计原理............................................................................................ 1
(二)
Socket 套接字................................................................................... 2
四、
TCP/IP 协议.................................................................................................. 3
(一)
网络接口层........................................................................................ 3
(二)
网络层................................................................................................ 3
(三)
传输层................................................................................................ 4
(四)
应用层................................................................................................ 4
(五)
TCP/IP 协议运作机制....................................................................... 5
(六)
通讯端口............................................................................................ 6
(七)
IP 地址 ............................................................................................... 6
五、
课程设计内容............................................................................................... 7
(一)
设计功能............................................................................................ 7
(二)
流程图................................................................................................ 7
六、
程序设计原理............................................................................................. 10
(一)
客户端.............................................................................................. 10
(二)
服务器端.......................................................................................... 10
七、
程序创建过程............................................................................................. 10
(一)
创建服务器...................................................................................... 10
(二)
创建客户端...................................................................................... 13
八、
程序截图..................................................................................................... 16
(一) 服务器界面截图 ........................................................................... 16
(二) 客户端界面截图 ........................................................................... 16
九、
设计使用说明............................................................................................. 18
十、
此次收获..................................................................................................... 19
十一、设计需要改进之处 ................................................................................. 19
十二、参考文献 ................................................................................................. 19
1
一、 课程设计题目
基于 TCP/IP 的网络文字聊天程序设计。
二、 设计要求
(一) 对设计方法的要求
使用 Visual C++6.0 开发在 Windows 控制台或图形界面下运行的程序。
(二) 对设计
内容
的要求
时间网络文字聊天程序的服务器端。
实现网络文字聊天程序的客户端。
主程序的结构和流程图。
程序运行的截图。
网络文字聊天程序的实现原理。
网络文字聊天程序实现代码的分析。
对课程设计说明书的要求。
(三) 设计思路与开发过程
对主要代码段要求详细的注释。
对本次设计的评价与设计的收获。
三、 设计原理及 Socket 套接字
(一) 设计原理
计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常
的工作还是学习,我们都越来越多的依靠到互联网。各种实时性的聊天娱乐软件
也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾
讯 QQ、微软的 MSN、移动的 Fetion 等,都是做的比较成功的实时聊天工具。
随着网络的日益普及,各种聊天工具也层出不穷,但当我们学习了《网络编程》
这门课程之后,我们便会觉得,其实要实现简单的网络通讯其实并不难。接下来
的课程设计就是针对一个简单的网络聊天程序,利用 MFC 为开发工具,实现基
本的通讯功能。
此程序主要分为两部分:服务器端和客户端。服务器端用于提供一个网络端
2
口,等待客户端发出请求,登录到此服务端,然后进行网络通讯和消息的转发;
客户端可通过服务器端的 IP 地址发送连接请求,然后登陆聊天室。整个程序的
主体使用了 CSocket 类的方法,实现了网络通讯聊天。
整个程序设计为两个部分:服务器 (Server) 和客户端 (Client)。
多人聊天的关键在于要将每个客户端发送过来的消息分发给所有其他客户
端,为了解决这个问题,在服务器程序中建立一个套接口链表,用来保存所有与
客户端建立了连接的服务端口。下面描述了多人聊天的实现原理:
当客户端 Client N 向对应的服务端口 N 发送了消息 Message,服务端口 N
将 Message 复制给所有套接口列表(USERLIST)中的套接口缓冲区,然后向每个
服务端口发送 WRITE 消息,使每个服务端口将 Message 发送给对应的客户端。
这样,所有客户端就都获得了 Message 消息,实现了多人聊天功能。
(二) Socket 套接字
socket 的英文原义是“孔”或“插座”。在这里作为 4BDS UNIX 的进程通信
机制,取后一种意思。socket 非常类似于电话插座。以一个国家级电话网为例。
电话的通话双方相当于相互通信的 2 个进程,区号是它的网络地址;区内一个单
位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于 socket 号。
任何用户在通话之前,首先要占有一部电话机,相当于申请一个 socket;同时要
知道对方的号码,相当于对方有一个固定的 socket。然后向对方拨号呼叫,相当
于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地
址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿
起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方
向电话机发出信号和对方从电话机接收信号的过程,相当于向 socket 发送数据和
从 socket 接收数据。通话结束后,一方挂起电话机相当于关闭 socket,撤消连接。
在电话系统中,一般用户只能感受到本地电话机和对方电话号码的存在,建
立通话的过程,话音传输的过程以及整个电话系统的技术细节对他都是透明的,
这也与 socket 机制非常相似。socket 利用网间网通信设施实现进程通信,但它对
通信设施的细节毫不关心,只要通信设施能提供足够的通信能力,它就满足了。
至此,我们对 socket 进行了直观的描述。抽象出来,socket 实质上提供了进
程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办
法建立联系并相互通信的。正如打电话之前,双方必须各自拥有一台电话机一样。
在网间网内部,每一个 socket 用一个半相关描述:
(协议,本地地址,本地端口)
一个完整的 socket 有一个本地唯一的 socket 号,由操作系统分配。
最重要的是,socket 是面向客户/服务器模型而设计的,针对客户和务器程
序提供不同的 socket 系统调用。客户随机申请一个 socket (相当于一个想打电话