软件课程设计报告局域网聊天程序.docxVIP

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

文档评论(0)

1亿VIP精品文档

相关文档