基于udp协议的网络聊天工具设计内容摘要:

科技学院《 Windows 程序设计 》课程设计报告 5 2 设计环境或器材、原理与说明 设计 环境与器材 因为选择使用 MFC 编程, 该程序又是网络编程, 所以设计环境与器材为: PC 机两到三台 (程序试运行时需要多台电脑充当客户端 ); 能正常连接的网卡; Windows环境与 Microsoft Visual C++ 编译环境; 原理与说明 在计算机网络中,信息的传输是建立在 物理传输介质与网络传输协议上的, TCP/IP协议是网络协议的一种,它分为不同的层次: TCP(Transmission Control Protocol——传输控制协议 ), UDP(User Datagram Protocol——用户数据报协议 ); IP(Inter Protocol——网际协议 );它们分别工作于传输层与网络层。 Window Socket 是 Windows 下的标准网络程序设计接口,它是由一些 API函数组成,用以提供对网络通信的支持。 该程序设计使用 Windows Sockets编程。 在数据传输协议中,我们使用 UDP协议, UDP协议是无连接的协议,在服务器端不调用 listen函数进行监听,也不调用 accept 函数建立连接, 其操作流程图如下图所示: 服务器端 客户端so ck e t函数建立套接字b i n d 函数给套接字指定本地地址se n d 函数和 re ve 函数收发数据cl o se so ck e t 函数关闭套接字so ck e t函数建立套接字b i n d 函数给套接字指定本地地址se n d 函数和 re ve 函数收发数据cl o se so ck e t 函数关闭套接字 图 21 无连接 协议的套接字操作流程图 首先,用 socket函数建立套接字,然后根据 本地的 IP 进行绑定,然后就可以通过使用 send 函数和 reve 函数 来进行 数据 的发送和接收了。 重庆科技学院《 Windows 程序设计 》课程设计报告 6 3 设计过程 及 程序代码 服务器端设计 服务器端程序 流程设计 下图是服务器端的程序流程设计图,当程序开始运行时,便初始 WinSock环境。 初始化完成后,程序便等待客户端的 接入和等待接收信息。 如果客户端发起请求连接的 connect请求,便将该客户端的 IP 加如链表,并在 ListBox中显示出来;如果收到的是已经 建立好连接的客户端发来的消息信息,则遍历链表,将收到的消息向链表中所保存的所有的客户端发送并在服务器端的接收窗口显示该消息;如果收到客户端发送来的断开连接请求,则在 ListBox和链表中删除该客户端的 IP。 关闭窗口程序结束。 开始初始化W i n S o ck 环境等待接收信息遍历链表向链表中所有的用户转发信息接收信息是否为连接信息在接收窗口显示信息在链表和L i st B o x中添加对应I Pc o n n e c tc o n n e c t在链表和L i st B o x中删除对应I Pd i s c o n n e c td i s c o n n e c t 图 31 服务器端程序设计 服务器端界面设计 使用 MFC 可以很方便的建立对话框,在打开 Microsoft Visual C++ 后建立一个 MFC AppWizard[exe]工程,然后在选择类型对话框中选择 Dialog Based,在选择包含部分时选择Windows Sockets,然后点击完成,于是便有了一个基本的对话框。 我们可以通过 MFC 中重庆科技学院《 Windows 程序设计 》课程设计报告 7 提供的编辑工具在该对话框中进行设计,如添加文本框、按钮、静态文本框、 ListBox等。 然后根据需要对各个控件的属性等进行设定,下图是根据客户端功能需求所设计的客户端界面: 图 32 客户端界面设计 当有客户端连入后,客户端的 IP 会自动的显示在 “在线主机列表 ”下的 ListBox中 , 其 下 面的删除按钮可以将 ListBox中所选的 IP 删除; 所有客户端 发来的消息和服务器自己所发的消息 都在接收窗口中显示,并可通过清除内容按钮清除内容 ; 服务器端也可以向所有客户端发送系统消息,该功能通过发送窗口和右边的发送、清除按钮实现。 服务器端套接字的具体操作 该程序设计使用 UDP无连接的 用户数据报协议 ,所以在设计中我们 不调用 listen函数进行监听,也不调用 accept 函数建立连接, 其操作流程 可见 图 31。 下面是在程序设计中建立套接字、绑定的具体实现: // socket 函数建立套接字 WSAStartup(MAKEWORD(2, 0), amp。 m_WSAData)。 //初始化套接字 m_sockLocal = socket(AF_INET, SOCK_DGRAM, 0)。 //创建本地服务套接字 //选择程序要处理的网络事件: WM_SOCKET 和 FD_READ WSAAsyncSelect(m_sockLocal, GetSafeHwnd(), WM_SOCKET, FD_READ)。 = i_addr()。 //指定 IP 地址 (服务器所在 系统 IP 地址 ) = AF_INET。 //协议族 = htons(SERVER_PORT)。 //服务器端口号 bind(m_sockLocal, (SOCKADDR*)amp。 m_addr_in, sizeof(m_addr_in))。 // bind 函数给套接字指定本地地址 下面分别是 接收和发送数据的具体代码: recvfrom(m_sockL。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。