m_pFile = new CSocketFile(this);
m_pArchiveIn = new CArchive(m_pFile,CArchive::load);
枫叶文学网www.fywxw.com
第11 章 网络编程
·299·
m_pArchiveOut = new CArchive(m_pFile,CArchive::store);
}
发送信息函数SendMsg()代码如下:
void CClientSocket::SendMsg(CMsg* pMsg)
{
if (m_pArchiveOut != NULL)
{
//数据由pMsg 输出到m_pArchiveOut
pMsg->Serialize(*m_pArchiveOut);
//将数据写入文件
m_pArchiveOut->Flush();
}
}
接收信息函数ReceiveMsg()代码如下:
void CClientSocket::ReceiveMsg(CMsg* pMsg)
{
//数据由m_pArchiveIn 读入到pMsg
pMsg->Serialize(*m_pArchiveIn);
}
重载的OnReceive()函数代码如下:
void CClientSocket::OnReceive(int nErrorCode)
{
//调用CSocekt 的OnReceive 函数
CSocket::OnReceive(nErrorCode);
//其余工作jiāo给文档类处理
m_pDoc->ProcessReceive(this);
}
其中,ProcessReceive()函数是CChatServerDoc 类的一个成员函数,在后面将会看到它的
具体实现。
(8)创建设定端口对话框
对服务器来说,它可以通过“设定端口号”对话框来设定服务端口,如图11-9 所示。其
中,对话框的ID 为IDD_SETUPDLG,Edit 控件的ID 为IDC_PORT。
图11-9 “设定端口号”对话框
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·300·
打开“ClassWizard”对话框,为此对话框创建一个类,取名为CPortDlg。然后为Edit
控件增加变量int m_Port,在构造函数中将其初始化为2000。
最后,在菜单栏中新建一菜单项,当单击此菜单项时,就会弹出如图11-10 所示的对话
框。
图11-10 对话框所对应菜单栏
此菜单项的ID 为ID_SETPORT。
(9)实现CChatServerDoc 类
大量的工作都是在CChatServerDoc 类中实现的。在开始编写代码前,首先在文件
“ChatServerDoc.h”