1、 软件课程设计报告软件课程设计报告 C C 语言语言 班 级: 姓 名: 学 号: 指导教师: 日 期: 年 月 日 i 目目 录录 1 1 设计内容设计内容. 1 2 2 应用程序总体分析与设计应用程序总体分析与设计 1 3 3 应用程序各功能模块分析与设计应用程序各功能模块分析与设计. 2 3.13.1 功能模块功能模块 2 3.1.13.1.1服务器模块服务器模块 2 3.1.23.1.2 客户端模块客户端模块 2 3.23.2 模块流程图模块流程图 . 4 4 4 程序测试程序测试. 6 4.14.1 测试过程测试过程 6 4.1.1 VS 2010截图 6 4.24.2 测试结果测试
2、结果 7 4.2.1服务器端截图 7 4.2.2客户器端截图 7 5 5 程序文档程序文档. 8 5.15.1 使用说明使用说明 8 5.25.2 程序说明程序说明 8 6 6 程序源代码程序源代码. 8 1 1 1 设计内容设计内容 通过 C 语言程序编程实现一个局域网聊天程序,包括服务器端程序和客户端程序,程 序能够实现两台主机或多台主机间的基本通信和文件传输。 2 2 应用程序总体分析与设计应用程序总体分析与设计 A. 编译预处理命令编译预处理命令 #include #include #pragma comment (lib,“wsock32.lib“) B. 该应用程序中使用的基本该应
3、用程序中使用的基本 Winsock 函数有:函数有: WSAStartup,socket,bind,listen,accept,connect,shutdown和closesocket等,使用数据传输 函数有send和recv。 C. 服务器服务器程序的步骤如下:程序的步骤如下: 1) 初始化以及创建套接字,由WSAStartup()和socket()函数完成。 2) 要将指定协议的套接字绑定到本地的 IP 地址和端口号。 这个过程通过 bind()函数来 完成。 3) 服务器处于监听状态,等待客户端连接,以便为它们的请求提供服务。服务进程必 须在所绑定的名字上进行监听。 因此需要把套接字置为
4、监听模式。 通过 listen()函数 来实现。 4) 服务器程序调用函数 accept 准备接受来自客户端的连接。如果有一个客户端这时 用 connect()函数试图建立连接,服务器端就可以接受连接。 5) 建立连接后,服务器端和客户端之间就可以使用 send()和 recv()函数进行通信。对 输入和接收到的信息进行甄别,如果收到“SendFile” ,则调用接收文件模块,进入 接收文件状态;若在键盘输入“SendFile” ,则调用发送文件模块,进入发送文件状 态。否则,进程将按照普通信息进行收发对话。 (这里需要说明的是,默认情况下 recv()函数处于阻塞模式,在接收数据前,程序 将
5、不向下执行。 ) 在控制台应用窗口中, 程序只能依次执行语句, 服务器和客户端在收到信息后, 可进行回复(输入回复信息,并按回车键发送) ,或者不回复(按回车键以接收 下一条信息) 。 D. 客户端客户端程序的步骤如下:程序的步骤如下: 1) 输入服务器 IP,存放在 servIP。 2) 初始化以及创建套接字,由 WSAStartup和socket函数完成。 3) 呼叫服务器,请求连接,构造 int CallServer()函数,其中调用了 connect()函数。 4) 建立连接后,服务器端和客户端之间就可以使用 send 和 recv 函数进行通信。对输 入和接收到的信息进行甄别,如果收
6、到“SendFile” ,则调用接收文件模块,进入接 收文件状态; 若在键盘输入 “SendFile” , 则调用发送文件模块, 进入发送文件状态。 否则,进程将按照普通信息进行收发对话。 2 3 3 应用程序各功能模块分析与设计应用程序各功能模块分析与设计 3.13.1 功能模块功能模块 3.1.13.1.1 服务器服务器模块模块 1. 套接口建立模块 1) 打开 WinsockWSAStartup 应用程序或 DLL 只能在一次成功的 WSAStartup()调用后才能进一步调用其它的 Windows Sockets API 函数。 2) 创建套接口socket() 服务器在使用套接口通信前,必须要拥有一个套接口。使用socket()函数创建套 接口sock. 三个参数分别为:AF_INET, SOCK_STREAM, 0。 3) 指定本地地址bind() Bind() 函数通过给套接口 sock 分配一个本地名字来为套接口建立本地捆绑, 即把一个套