当前位置:文档之家› 网络协议编程课程设计

网络协议编程课程设计

HUNAN CITY UNIVERSITY

网络协议编程课程设计

说明书

设计题目:基于多线程的网络聊天控制台软件的设计与实现专业:网络工程

学生姓名:朱江

班级学号: 1206102-21

分组成员:1206102-06郭辉超1206102-18曾涛1206102-21朱江

指导教师:黄雪华老师汪彦老师

2015 年 07月 03日

《网络协议编程课程设计》报告

学号:1206102-21 姓名:朱江

一、设计时间

2015年06月29日-----07月03日。

二、设计地点

湖南城市学院信息楼507机房。

三、设计目的

1、巩固《网络协议编程》课程涉及的基本知识,培养灵活运用知识进行独立设计的能力;

2、掌握TCP/IP网络程序框架、Winsock API、高级网络编程API的使用;

3、提高综合运用所学的理论知识独立分析和解决问题的能力;

4、进一步熟悉利用Visual C++6.0进行开发的能力;

5、培养查阅资料,独立思考问题的能力。

四、设计小组成员

1206102-06 郭辉超,1206102-18 曾涛,1206102-21 朱江。

五、指导老师

黄雪华老师、汪彦老师。

六、设计课题

经过小组大部分组员的讨论,决定选取选题(基于多线程的网络聊天控制台软件的设计与实现),编写一个基于局域网的多线程控制台聊天系统。

理由:

1、此系统要求采用C/S模式实现,有利于进一步深刻理解和掌握这种基本的网络编程模式。

2、该系统功能相对简单,易于实现,适于初学者。

3、该系统牵涉到Winsock编程,需要灵活运用这些知识解决实际问题,有利于培养网络系统开发的实际动手能力。

七、基本思路及关键问题的解决方法

设计思路

对于聊天程序,一般都是采用 C/S 模式,即服务器/客户端的模式来设计。这样的模式有利于用户的操作和更好的用户体念。而客户端的设计主要关注与用户的体念和操作方便,其网络设计比较简单;服务器则要完成大量的客户控制、数据转发等操作,设计起来相对更加复杂。

总体设计

聊天程序是一个典型的网络程序,而网络程序的设计大多是基于 TCP/IP协议来实现的, TCP/IP协议是一个4层协议族,如图1所示。

聊天程序主要是依赖于传输层来实现,在传输层中有两个重要的协议:TCP协议和UDP协议。其中TCP协议(传输控制协议)是一个面向连接的协议,本协议在进行网络传输过程中首先必须建立一个安全的连接(通常是采用3次握手来实现的),UDP(用户数据报协议)是一种无连接的协议,本协议在进行数据传输前不用建立点对点的连接,所传输的

数据不会进行安全检查,如果有丢包的现象也不会重发,本文所涉及的聊天程序采用TCP 协议来实现由于每个电脑可能会有多个服务,而每个服务都采用同一个IP地址来进行收发数据,所以就必须采用一种机制来实现对每个服务的区分这就是端口,对于同一IP地址的不同端口号就代表了不同的服务,所以对于网络聊天程序的服务器端必须设定一个端口号,而客户端则必须连接到服务器端的IP和其指定的端口,如图2所示。

在本文的聊天程序中,采用客户端发送数据->服务器接收数据->服务器转发数据->客户端接收数据的流程来完成。由于该程序是一个服务器和多个客户端进行聊天的,所以在这里就必须注意以下几个问题:

①服务器需要监控端口,以便客户的随时连接;

②服务器需要监控数据流,以便随时接受来自客户端发来的数据;

③为了实现客户点对点的聊天,则将为每个客户建立一个线程。

服务器设计

服务器设计主要难点是对多线程的设计,在这里主要涉及到三方面的内容:

一是对客户端接入的监控,需要一个线程来完成;

二是分别为每个客户端创建一个线程,用于收发数据,使客户端之间不会彼此干扰;

三是每个客户端产生的线程对数据输入流进行监控,随时准备接收数据。对于数据则应该采用数据包的形式来进行封装,分别由发送者的地址,接收者的地址和数据构成,其中地址由昵称、IP和端口构成。当服务器接收到该数据后,将这些数据向每个客户端都发送出去,由客户端来决定是否接收该数据。

所示:另外,当客户端连接到服务器时,将向服务器发送一个数据包,服务器从数据包里面提取出客户端的地址信息和昵称,并且根据这些信息生成一张地址信息和昵称的对照表,且将这张表群发给每个客户;当有客户退出连接时,服务器则从对照表中将该客户的信息删除,并且群发该表给所有客户,

该表的形式如下:

地址昵称

127.0.0.1 朱江

客户端设计

对于客户端的设计则比服务器简单得多,主要是从界面等方便用户操作的角度来考虑。客户端主要需要完成连接服务器、数据收发等功能。对于数据收发功能主要通过数据流来实现。

八、算法及流程图

九、调试过程中出现的问题及相应解决办法

1.一开始在客户端与服务器进行通信时,只有服务器能看见客户端的消息,而客户端看不见服务器发的消息,之后我们发现这是因为在客户端接受消息的代码少了,在补全之后,双方都能接收信息。

2.之后我们想给这个段代码多添加一些其他的功能,首先添加时间,在此过程中我们一开始准备使用CTime t=CTime.getCurrentTime();这个方法,可是除了一些我们没能解决问题,后来经过询问老师和查询资料,最终我们使用了源程序中的获取时间的代码。

十、课程设计心得体会

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程,通过实验学习和领悟,充分的熟悉了VC++的运用和操作,并顺利完成实验,增强自身团队协作意识。

十一、源程序

客户端

#include "stdafx.h"

#include

#include

#pragma comment(lib,"WS2_32.lib")

#include

#include

SOCKET sockclient;

sockaddr_in sockaddrclient;

char sendbuf[100];

相关主题