收藏 分享(赏)

第13章 网络编程80464.ppt

上传人:dreamzhangning 文档编号:4299300 上传时间:2018-12-21 格式:PPT 页数:32 大小:945KB
下载 相关 举报
第13章 网络编程80464.ppt_第1页
第1页 / 共32页
第13章 网络编程80464.ppt_第2页
第2页 / 共32页
第13章 网络编程80464.ppt_第3页
第3页 / 共32页
第13章 网络编程80464.ppt_第4页
第4页 / 共32页
第13章 网络编程80464.ppt_第5页
第5页 / 共32页
点击查看更多>>
资源描述

1、第13章 网络编程,本章要点,通过本章的学习,使读者: 了解网络通信模型 熟悉CSocket程序设计的基础知识 掌握基于CSocket类进行网络编程方法 掌握QQ聊天程序的设计和实现技术,13.1 MyQQ聊天程序,13.1.1 功能介绍 1服务器端程序,(1) 接受客户的连接请求,对在线客户进行管理(如,显示在线客户等)。 (2) 聊天信息的接收和转发。 (3) 显示聊天室运行情况,如用户上线、下线信息和公众聊天信息,但不显示私人聊天信息。,服务器的任务,图13-1聊天室服务器端,2客户端程序,(1) 编辑发送信息:编辑聊天文字; (2) 在线用户信息:显示聊天室中的当前在线的所有客户名;

2、(3) 聊天信息: 用户发送和接收到的聊天信息。,图13-2 聊天室某客户端,13.2 CSocket程序设计基础,13.2.1 计算机名、IP地址和端口,1IP地址 IP地址是一个32位的数字,用于唯一地标识位于网络中的计算机。IP地址由两部分组成:网络标识和主机标识。,2计算机名 典型的hosts文件的内容如下:127.0.0.1 localhost,其中localhost为计算机名,3端口 TCP/UDP协议通过端口(Port)来标识进行通讯的进程,TCP/UDP协议为每个端口都分配一个端口号,当进行通信的进程通过系统调用,同一个或多个端口建立联系后,就可已通过这些端口进行数据传输了,1

3、3.2.2 套接字Socket,通讯的基础是套接口(Socket),一个套接口是通讯的一端。两种套接口,即流套接口和数据报套接口。,提供了双向的、有序的、无重复并且无记录边界的数据流服务,流套接口,支持双向的数据流,但并不保证是可靠、有序和无重复的。,数据报套接口,13.2.3 WinSock的工作原理,1. 利用WinSock进行有连接的通信这种通信方式采用流的方式进行数据传输,要求客户必须指定服务器的地址 。典型的面向连接的程序的工作方式如图13-4所示。,2. 利用WinSock进行无连接的通信 发送和接收方处于相同的地位,没有主次之分。函数调用顺序如图13-5所示。,13.3 基于CS

4、ocket的网络编程,1 服务器端 使用CSocket类编制网络服务端应用程序的步骤为,(1) 从CSocket类派生一个新类。 (2) 创建一个CSocket派生类对象。 (3) 调用CSocket:Create()函数创建一个套接口,并指定一个端口。 (4) 调用CSocket:Listen()函数侦听端口。 (5) 在CSocket派生类中添加虚函数OnAccept()。 (6) 通信结束时,调用读写套接口的Close()函数关闭为各个客户分配的读写套接口。,13.3 基于CSocket的网络编程,2 客户端 客户端的异步通信模式实现过程如下:,(1) 创建一个CSocket类的派生类对

5、象,用于连接和读写。 (2) 调用CSocket:Create( )函数创建一个套接口。 (3) 调用CSocket:Connect( )函数连接服务器的指定端口。 (4) 调用CSocket:Send( )函数,发送数据。 (5) 在CSocket:OnReceive( )函数中进行读写操作。 (6) 在结束通信时,调用CSocket:Close( )函数关闭套接口。,13.4 MyQQ客户端程序,13.4.1 创建工程MyWc 13.4.2 界面可视化设计 根据表13-2中的定义编辑对话框资源,设计完毕对话框如图13-7所示。,图13-7 设计完后的“IDD_ MYWC_DIALOG”对话

6、框,表13-2 控件属性表,13.4.3 设计通信类CWCSocket,创建设计一个CSocket类的派生类CWCSocket,用于与服务器通信。 1创建一个新类CWCSocket,2 修改CWCSocket类 修改CWCSocket类,以便与服务器通信。 (1) 在WCSocket.h中定义一个与服务器端相同的结构,以便通过该结构的对象存储和交换数据。,typedef struct char m_strName255; /客户名字;char m_dbData255; /要发送的数据或信息;char m_type255; /通信类型char m_talkingName255; /聊天客户名 _

7、DATA;,(2) 在CWCSocket类中,添加_DATA类型的成员变量m_Dat,用于存储数据。,13.4.4 为对话框中各控件引入变量,13.4.6 实现客户的登入和退出功能,1. 连接服务器,进入聊天室(上线) void CMyWcDlg:OnConnect(), /更新关联变量,如服务器名、端口号UpdateData(true); CString cName = m_client_name;,/创建套接字,建立与服务器的连接if(!sockClient.Create() if(!sockClient.Connect(m_server_name,m_nPort) ,/向服务器发送客户资

8、料,如用户名strcpy(m_Dat.m_type,“CONNECTION“);strcpy(m_Dat.m_strName,m_client_name);sockClient.Send(,2. 断开与服务器的连接,退出聊天室(下线),void CMyWcDlg:OnClose() / 向服务器报告下线信息strcpy(m_Dat.m_type,“CLOSE“);sockClient.Send( ,13.4.7 实现聊天信息的发送,void CMyWcDlg:OnSend() /更新关联变量,如,要发送的信息UpdateData(true);CString talkingName;m_ctlN

9、ame.GetText(m_ctlName.GetCurSel(),talkingName);/对聊天类型进行判断,填写数据包中各个字段数据if(talkingName != “所有人“) strcpy(m_Dat.m_type,“PRIVATE“);strcpy(m_Dat.m_talkingName,talkingName);else strcpy(m_Dat.m_type,“MSG“);memset(m_Dat.m_dbData,0,255);memcpy(m_Dat.m_dbData,m_send_info,m_send_info.GetLength();strcpy(m_Dat.m_

10、strName,m_client_name);/发送信息int iSent=sockClient.Send( ,13.4.8 实现聊天信息的接收,1. 添加自定义消息及消息处理函数 2. 添加虚函数,处理接收到的信息 3. 安装定时器,添加定时器消息函数 4. 处理接收到的数据,13.4.9 实现私人聊天功能,用Check Box复选框,控制选择在线客户。当复选框选中时,在线客户列表框设置为可选;否则为禁止选择,自动设置为所有人进行公众聊天。,void CMyWcDlg:OnCheck1() if(m_talk = false)GetDlgItem(IDC_LIST_NAME)-EnableW

11、indow(true);else GetDlgItem(IDC_LIST_NAME)-EnableWindow(false);m_ctlName.SetCurSel(0); ,13.5 MyQQ服务端程序,13.5.1 创建工程MyWs 13.5.2 界面可视化设计 13.5.3 为对话框中控件引入变量,表13-6 各控件的关联变量属性表,13.5.4 创建CSocket的派生类,(1)侦听客户机的连接请求,并将申请的客户用链表连接; (2)接收客户机发来的信息,然后转发给其它所有在线客户(公众聊天)或指定的客户(私人聊天),服务端与客户机通信模块的2大任务,1创建一个侦听类CLSock 在M

12、yWs工程中,创建一个CSocket类的派生类CLSock,用于侦听客户的连接请求。,2. 设计一个读/写类CRWSock 创建CSocket类的派生类CRWSock,,专门用于读写,并与侦听类CLSock位于相同的文件LSock.h,LSock.cpp中。,13.5.5 建立CRWSock、CLSock与CMyWsDlg类的关联,1修改CRWSock和CLSock类 2. 修改CMyWsDlg类,13.5.6 处理客户的连接请求,(1) 在CMyWsDlg类中,添加一个CPtrList类的对象,用于管理各个客户的套接口CPtrList m_list; (2) 在CLSock类中添加虚拟函数O

13、nAccept(),用于处理客户的连接请求,13.5.7 处理接收客户的信息,1添加虚拟函数OnReceive(),2编写程序代码 在虚拟函数OnReceive()中接收客户传来的数据,并按数据不同类型分类处理,(1) 当收到客户的连接信息时,就通知其它在线用户,并在列表框中显示客户上线信息; (2) 当收到客户离线信息时,就从套接口链表中删除该结点,并在列表框中显示客户下线信息; (3) 收到公众聊天信息时,就转发给所有客户(公众聊天); (4) 收到私人聊天信息时,就转发给指定客户(私人聊天)。,13.5.8 实现服务端程序“启动与关闭”功能,1 启动程序,(1) 调用CSocket:Create()函数创建一个套接口,并指定一个端口; (2) 调用CSocket:Listen()函数侦听端口。,编程要点,13.5.8 实现服务端程序“启动与关闭”功能,2 关闭程序,(1) 调用读写套接口的Close()函数,关闭为各客户分配的读写套接口; (2) 释放空间。,编程要点,课堂实训,1完善聊天室客户端程序,将连接前的一些输入信息与聊天内容分离,增加客户登入界面。并在客户端界面,添加在线总人数。 2完善聊天室服务程序,添加客户登入、下线和公众聊天记录的当前时间。 3. 在服务端界面,添加在线总人数。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > 网络与通信

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报