聊天程序的实现
作者:孙寿天 来源:赛迪网 添加时间:2006-5-21 12:59:46
一、预备知识
1.套接字简介
套接字是一种网络编程接口,提供了发送和接受数据的机制,是网络编程的基础。套接字可分为数据报套接字(Datagram Sockets)和流式套接字(Stream Sockets)。数据报套接字提供了一种非连接的数据通讯方式,使用的是用户数据报协议(UDP),安全性差;而流式套接字提供了连接的数据通讯方式,使用传输控制协议(TCP)。OICQ在双方通讯时就使用了UDP协议。在程序实现上的主要区别在于:使用流式套接字时首先通讯双方要建立连接。
2.WinSock简介
WinSock是Windows Socket规范的简称,为应用程序开发商提供了一套简单的API,是开放的、支持多种协议的Windows下的网络编程接口。从1.0版到2.0.8版,经过不断完善,事实上已经成了Windows网络编程标准。在此基础上,为简化网络编程,Microsoft公司的基本类库提供了两个用于WinSock编程的类,即:CAsyncSocket和CSocket。CSocket是从CAsyncSocket继承而来,派生关系如图1。这两个类的成员函数等详细信息可参考MSDN和相关资料。
二.实现过程
1. 新建工程,选择Projects中的MFC AppWizard(exe)类型,Project name命名为chat2,在Step 1中选择Dialog based,因为我们建立的是基于对话框的MFC程序,在step2中选择Windows sockets以得到WinSock的支持,单击<Finish>,完成应用向导。
2. 设计界面和添加变量,根据对话框的界面和属性表为程序添加控件和设置其属性。
3. 使用快捷键Ctrl+W打开类向导为对话框添加变量和函数。
(1)为四个按钮添加单击按钮时对应的函数,函数名保持缺省。
(2)将对话框的控件和变量相关联,具体关系见下表
4. 添加变量并修改初始化函数。
(1)使用FileViewf打开文件Chat2Dlg.h,在类定义前面加入如下代码(MySocket类在下面定义):
#include "mysocket.h"
(2)使用Class View添加OnAccept、OnReceive、OnClose等函数,全部为void类型。并定义CMySocket型的两个变量,分别用于发送和接收数据,添加后类CChat2Dlg的定义代码中会增加如下声明:
CMySocketm_sConnectSocket,m_sListenSocket;
void OnClose();
void OnReceive();
void OnAccept();
5. 编写自己的WinSock通讯类。
Insert菜单中的New Class...添加新类,Class type选择Generic Class,Class name设置为CMySocket,基类设置为CAsyncSocket,继承关系为默认的public。
(1)在类定义前面声明对话框类,代码如下:
class CChat2Dlg;
(2)使用Class View添加函数OnAccept、OnReceive、OnClose、SetParents,具体类型添和参数,请参考MySocket.h中的部分(注意前三个函数为虚函数),添加后代码为:
CChat2Dlg * m_pDlg;
virtual void OnAccept(int);
virtual void OnReceive(int);
virtual void OnClose(int);
void SetParents(CChat2Dlg * pDlg);
(3)编辑MySocket.cpp,首先在最前面添加#include "chat2dlg.h",以包括chat2Dlg中相应函数的定义,给函数的代码略。
经过编译连接后,可以在两台联网的机器上运行程序,其中一个设置为服务端,单击“确定”,开始侦听,另一个程序设置为客户端,并把ip地址设置为服务端的机器的ip地址,单击“确定”,就可以进行通讯了。
站内搜索