北科大小学期软件课程设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北京科技大学

软件课程设计报告——C语言

班级:

姓名:

学号:

指导教师:

日期:

1

目录

1设计内容 (3)

2应用程序总体分析与设计 (3)

3应用程序各功能模块分析与设计 (4)

3.1功能模块 (4)

3.1.1服务器端 (4)

3.1.2客户端 (4)

3.2模块流程图 (4)

3.2.1服务器端流程图 (4)

3.2.2客户端流程图 (6)

3.3程序结构图 (8)

4程序测试 (8)

4.1测试过程 (8)

4.1.1VS2010截图 (8)

4.2测试结果 (9)

4.2.1服务器端截图 (9)

4.2.2客户器端截图 (9)

5程序文档 (10)

5.1使用说明 (10)

5.2程序说明 (10)

6程序源代码 (11)

6.1客户端: (11)

6.2服务器端 (14)

2

1设计内容

通过c语言编程实现一个局域网聊天的程序,包括服务器端程序和客户端的程序,该程序能够实现两台主机之间或多台主机之间的基本通信。

2应用程序总体分析与设计

该程序包括两个部分,一个是服务器端,另一个是客户端。由于程序要实现两台或多台主机之间的相互通信,这就涉及到了利用c语言进行网络编程。还有两台或者多台主机之间的网络通信需要用到通信协议,而TCP/IP有两种不同的通信协议,即面向有连接的TCP 通信协议和面向无连接的UDP通信协议。教学要求掌握TCP通信的原理。所以选择TCP通信协议进行多台主机之间的连接。

服务器端的实现过程:

1、初始化Windows Socket

2、创建一个监听的Socket

3、设置服务器地址信息,并将监听端口绑定到这个地址上

4、开始监听

5、接受客户端连接

6、和客户端通信

7、结束服务并清理Windows Socket和相关数据,或者返回第4步

客户端实现的过程:

1、加载套接字库

2、创建套接字

3、请求连接服务器

4、发送数据/接收数据

5、关闭套接字

6、卸载所加载的套接字库。

3

3应用程序各功能模块分析与设计

3.1功能模块

本程序由两大部分组成,包括服务器端和客户端。服务器端包含的模块有初始模块、循环控制模块和服务模块;客户端包含的模块有初始化模块、功能控制模块和数据传输控制模块。

3.1.1服务器端

(1)初始化模块用于初始化各个全局变量赋初始值。初始化Winsock,加载Winsock库。

(2)功能模块控制。该模块为其他模块提供调用的函数,包括参数获取功能和错误输出功能。

(3)服务模块。该模块为客户端提供服务功能,包括接收来自客户端的数据,并发送数据到客户端。

3.1.2客户端

(1)初始化模块。该模块用于初始化客户端的Winsock,加载Winsock库。(2)功能模块控制。与服务器端一样,该模块提供了参数获取和错误输出功能。

(3)数据传输控制模块。该模块控制着整个客户端的数据传输,包括数据发送和接收等。

3.2模块流程图

3.2.1服务器端流程图

服务器端系统流程图所示。程序首先调用为库文件wsock32.lib使用所需资源。程序首先调用函数获取用户提供的先项,如果没有提供选项,则直接使用默认值,如果有选项提供并成功获取(选项错误则显示用户帮助并终止程序),则初始化变量和Winsock,并创建TCP流套接字;然后解析主机名(如果选项提供的是IP地址,或者使用是默认值)或者IP地址(如果选项提供的是主机名),解析成功后则设置服务器地址的各个参数,包括地址、IP地址和端口号;接下来将创建的TCP流套接字和设定的服务器地址绑定(调用bind()函数);绑定成功后,则开始用listen()函数侦听客户的连接。接收客户端请求成功后,进行接收数据、发送数据等操作。接收数据完毕后,关闭窗口完成通信。

4

3.2.2客户端流程图

客户端系统流程如图所示。客户端程序执行时调用库函数获取用户选项,如果获取的选项错误,则终止程序,如果选项正确则开始创建TCP流套接字,成功创建TCP流套接字后则作和服务器类似的操作,即解析主机名或IP地址、设置服务器端地址;然后进行连接服务器操作,若能成功连接则输出连接信息,并发送消息到服务器端;然后接收来自服务器端的响应,(消息),并将接收到的消息输出。最后关闭套接字和释放占用的资源。和服务器一样,在操作过程中,任何一步操作失败都将退出程序,并提示错误信息。

6

8

3.3程序结构图

4程序测试

4.1测试过程

4.1.1VS2010截图

TCP 程序设计

服务器端 客户端

初始化模块

功能控制模块

服务模块

初始化模块

功能控制模块

数据传输控制模块

9

4.2测试结果

4.2.1

服务器端截图

4.2.2客户器端截图

5程序文档

5.1使用说明

程序能实现两台主机或多台主机间的基本通信。运行环境Windows 7/XP,运行客户端.exe程序,与服务器端连接上后,即可进行相关数据传输。但是必须客户端首先发送数据,按Enter结束,数据即发送到服务器端,服务器端即可收到客户端发送的信息。然后服务器端输入需要发送的数据,按Enter键发送,客户端也可收到相应信息。

5.2程序说明

本程序由两大部分组成,包括服务器端和客户端。服务器端包含的模块有初始模块、循环控制模块和服务模块;客户端包含的模块有初始化模块、功能控制模块和数据传输控制模块。

服务器端:

(1)初始化模块用于初始化各个全局变量赋初始值。初始化Winsock,加载Winsock库。

(2)功能模块控制。该模块为其他模块提供调用的函数,包括参数获取功能和错误输出功能。

(3)服务模块。该模块为客户端提供服务功能,包括接收来自客户端的数据,并发送数据到客户端。

客户端:

(1)初始化模块。该模块用于初始化客户端的Winsock,加载Winsock库。

(2)功能模块控制。与服务器端一样,该模块提供了参数获取和错误输出功能。

(3)数据传输控制模块。该模块控制着整个客户端的数据传输,包括数据发送和接收等。

程序中主要变量含义:err:错误,lenfrom:接收的字符长度,

addSrv.sin_addr.s_addr: IP地址,ddrSrv.sin_family:使用的IP地址族,addrSrv_port:端口号。

数据结构:运用结构体,用于保存IP地址和端口信息,存储Winsock的最新版本号。运用数组,用于存储输入的字符数。

下面是关于头文件的说明。

#include :在使用标准函数库中的输入输出函数时,编译系统要求程序提供有关的信息(例如对这些输入输出函数的声明),#include的作用就是用来提供这些信息的,stdio.h是C编译系统提供的一个文件名,stdio 是“standard input & output”的缩写,即有关标准输入输出的信息。在程序中用到系统提供的标准函数库中的输入输出函数时,应在程序的开头写上一行:

#include"stdio.h"或者是#include,这样才能调用库函数。

10

相关文档
最新文档