多点聊天室
CPtrList m_connList; //连接列表
成员函数:
void OnAccept(); //接收连接请求
void OnReceive(Csocket * pSocket);//获取客户机的发送信息
void backClients(CMsg * pMsg); //向聊天室的所有的客户机转发消息
指导教师意见
签名:年月日
为CMsg类添加成员变量和成员函数
Cstring m_strBuf; //字符串成员
BOOL m_bClose; //是否关闭状态
Virtual void Serialize(Carchive &ar); //序列化函数
构造一个专用于消息传输的类,CMsg
为CMsg类添加成员变量和成员函数:
8.添加事件函数和成员函数的代码
服务器接收客户机发来的信息,然后将它转发给聊天室的其他客户机,
从而实现多个客户机之间的信息交换,服务器动态统计进入聊天室的客户机数目,并显示出来。
及时显示新的客户机进入聊天室和客户机退出聊天室的信息,也转发给其他的客户机。
1.2创建聊天室的服务器端程序
1.利用MFC AppWizzard创建服务器端应用程序框架
Void ReceiveMsg(); //接收服务器发来的信息
Void SendMsg(Cstring strText, bool st) //向服务器发送信息
为CTcDlg对话框类添加成员变量
7.创建专用于数据传输序列化处理的类CMsg
与服务器端一样,客户机端也要构造一个专用于消息传输的类。该类必须从Cobject类派生,类名CMsg。
从Csocket类派生两个套接字类,一个类名为CLSocket,专用于监听客户机端的连接请求,为它添加OnAccept事件处理函数;
另一个类名为CCSocket,专用于与客户机端建立连接并交换数据,为它添加OnReceive事件处理函数。
这两个类都要添加一个指向对话框类的指针变量:
CTsDlg * m_pDlg;(注意:CTsDlg类我取名为了CTalkServerDlg,你们可以自己取名)
DECLARE_MESSAGE_MAP()
};
void CTsDlg::OnClose()
{
// TODO: Add your control notification handler code here
CMsg msg;
msg.m_strText="服务器终止服务!";
delete m_pLSocket;
//
#include "stdafx.h"
#include "ts.h"
#include "tsDlg.h"
#include "Msg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
CTcDlg * m_pDlg //成员变量
从CSocket类派生一个套接字类,类名为CCSocket:
为CCSocket类添加的m_pDlg成员变量
为CTcDlg对话框类添加控件对象事件的响应函数
添加OnSend()成员函数:
6.为CTcDlg对话框类添加其他的成员函数和成员变量
成员变量:
CCSocket * m_pSocket; //套接字对象指针
创建专用于数据传输序列化处理的类CMsg
为了利用CSocket类及其派生类可以和CSocketFile对象、Carchive对象合作来进行数据发送和接收的特性,构造一个专用于消息传输的类,该类必须从Cobject类派生。如下图所示:
为CMsg类添加成员变量和成员函数(可参看书上的文件清单):
Cstring m_strText; //字符串成员
贵州大学实验报告
学院:计算机科学与技术专业:XX班级:网络XX
姓名
XXX
学号
XXX
实验组
实验时间
2015、4、27
指导教师
XX
成绩
实验项目名称
多点聊天室
实验目的
1.掌握CSocket类的编程,包括创建CSocket对象、建立连接、发送和接收数据等;
2.掌握CSocket类的编程模型;
3.学会把CSocket类、CArchive类和CSocketFile类结合起来编程。
CSocketFile * m_pFile; //CSocketFile对象指针
CArchive * m_pArchiveIn; //用于输入的Carchive对象指针
Carchive *m_pArchiveOut; //用于输出的Carchive对象指针
成员函数:
Void OnReceive(); //接收信息
成员函数:
void Initialize(); //初始化
void SendMessage(CMsg* pMsg) //发送消息
void ReceiveMessage(CMsg * pMsg) //接收消息
为CTsDlg对话框类添加其他的成员函数和成员变量:
成员变量:
CLSocket * m_pLSocket; //侦听套接字指针变量
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
实验数据
实验总结
在本次实验过程中,通过上机基本掌握了CSocket类的编程,包括创建CSocket对象、建立连接、发送和接收数据等以及CSocket类的编程模型与此同时野学会了把CSocket类、CArchive类和CSocketFile类结合起来编程。
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
工程名为ts,选择Dialog based的应用程序类型,选择中文(中国),选择Windows Sockets支持,其他接受系统的默认值。
所创建的程序将自动创建两个类,应用程序类CTsApp,对应的文件是ts.h和ts.cpp;对话框类CTsDlg,对应的文件是tsDlg.h和tsDlg.cpp
4.创建从Csocket类继承的派生类
#include "Msg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
为CCSocket添加以下成员变量和成员函数。
成员变量:
CSocketFile *m_pFile; //CSocketFile对象的指针变量
CArchive *m_pArchiveIn; //用于输入的CArchive对象的指针变量
Carchive * m_pArchiveOut; //用于输出的Carchive对象的指针变量
}
2.创建聊天室的客户机端程序。
1.利用MFC AppWizard创建客户机端应用程序框架
工程名是tc,选择Dialog based的应用程序类型,选择中文(中国),选择Windows Sockets支持,其他接受系统的默认值。
所创建的程序将自动创建两个类,应用程序类CTcApp,对应的文件是tc.h和tc.cpp,
对话框类CTcDlg,对应的文件是tcDlg.h和tcDlg.cpp
2.为对话框界面添加控件对象
设置控件的属性:
为对话框中的控件对象定义相应的成员变量
4.创建从Csocket类继承的派生类
从CSocket类派生一个套接字类,类名为CCSocket,用于与服务器端建立连接并交换数据。
改造它的构造函数,为它添加OnReceive事件处理函数和以下的成员变量
主要在CTcDlg对话框类的tcDlg.cpp中和套接字类的实现文件中,添加用户自己的事件函数和成员函数的小部分代码。
// tcDlg.cpp : implementation file
//
#include "stdafx.h"
#include "tc.h"
#include "tcDlg.h"
#include "CSocket.h"
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
实验要求
1.必须要有详细的实验步骤;
2.严格按照实验报告的格式书写;
3.实验报告不用把所有的源代码写出,只写出与实验结果相关的部分。
实验仪器
VC++ 6.0
实验内容
1、创建聊天室的服务器端程序;
1用Csocket类实现的聊天室程序