基于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。基于udp协议的网络聊天工具设计
相关推荐
E,strSQL)) { MessageBox(打开数据库失败 !,数据库错误 ,MB_OK)。 return。 } //显示用户资料 m_strPass =。 m_strRePass = m_strPass。 m_bIsAdmin =。 ()。 UpdateData(FALSE)。 *pResult = 0。 } void CUserDlg::OnButtonNew() {//清空用户资料
++) for(int j=0。 j4。 j++) (i)。 //每次从上面的临时地图中取走 (获取后并在临时地图删除 ) //一个动物放到地图的空方块上 for(int i=0。 im_nRow*m_nCol。 i++) { //随机挑选一个位置 int nIndex=(int(rand()*+rand()*+rand()))%()。 //获取该选定物件放到地图的空方块
有信息保持不变。 可由特殊方式擦出,主要存储需要永久保持的系统或用户程序。 ( 3) 电可擦出只读存储器( EEROM) :使用编程器能容易的进行修改的存储 单元。 同样,作为只读存储器,其内存储的数据断电情况下保持不变。 通常也可 根据项目设计的需要, 使用专用内存卡片方式扩充 (但扩充能力得依各厂牌与型号有所不同 )。 输入 /输出单元 PLC 的对外功能,主要是通过各种 I/O 接口 模块
址锁存有效信号输出端。 当访问片外程序存储器或数据存储器时, ALE(地址锁存允许)输出脉冲用于锁存地址的低 8 位字节,一般情况下, ALE 仍以时钟振荡频率的 1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的,要注意的是:每当访问外部数据存储器时将跳过一个 ALE 脉冲。 XTAL1(18):振荡器反相放大器 的输出端。 通过 XTAL XTAL2 外接晶振后
TL0=0Xfb。 P04=1。 //电机 1 左轮 P05=1。 P06=1。 //电机 2 P07=0。 i=1。 } if(P00==0amp。 amp。 P01==0amp。 amp。 P02==0amp。 amp。 i==1) // 特别 {TH0=0XFF。 TL0=0Xfb。 P04=1。 P05=1。 P06=1。 基于 STC89C52 单片机的智能小车设计系统
发展得很快,各 PLC 厂商都十分重视 PLC 的通信功能,纷纷推出各自的网络系统。 新近生产的 PLC 都具有通信接口,通信非常方便。 PLC 的国内外现状及未来发展 前景 1. PLC 的国内外 现状 世界上公认的第一台 PLC 是 1969 年美国数字设备公司( DEC)研制的。 限于当时的元器件条件及计算机发展水平,早期的 PLC 主要由分立元件和中小规模集成电路组成