WEB开发网
开发学院软件开发VC 典型网络数据库系统软件设计 阅读

典型网络数据库系统软件设计

 2010-02-19 20:34:02 来源:WEB开发网   
核心提示:5、客户端设计,<1>、建立一个名为Client,基与对话框的应用程序,典型网络数据库系统软件设计(4),在Step 2 of 6中选Windows Sockts支持,<2>、在CClientDlg中添加成员,CString Decode(int n,CString strMsg); CMsg

5、客户端设计。

<1>、建立一个名为Client,基与对话框的应用程序,在Step 2 of 6中选Windows Sockts支持,

<2>、在CClientDlg中添加成员。

CString Decode(int n,CString strMsg);
    CMsg msg;
    CMySocket * m_pSocket;
    CArchive * m_pArOut;
    CArchive * m_pArIn;
    CSocketFile * m_pSF;

    void MyReceive();
在CMySocket类中添加成员。 CClientDlg * m_pDlg;
    CMySocket(CClientDlg *pDlg);
构造函数实现,获得指向主对话框的指针

CMySocket::CMySocket(CClientDlg *pDlg)
{  
    m_pDlg=pDlg;
}

<3>、关键函数

 BOOL CClientDlg::OnInitDialog()
{
   ...
   m_strHost="192.168.1.126";
   m_iPort=1234;
   UpdateData(FALSE);
   GetDlgItem(IDC_BUTTON_SEND)->EnableWindow(false);
   Expand(0);

   return TRUE; // return TRUE unless you set the focus to a control
}
void CClientDlg::OnLogin() //登录函数
{
   UpdateData(TRUE);
   GetDlgItem(IDC_BUTTON1)->SetWindowText("Wait");
   m_pSocket=new CMySocket(this);
   m_pSocket->Create();
   int nTry=3,n;
   do{
    n=m_pSocket->Connect (m_strHost,m_iPort);
   }while(n!=1 && nTry--);
  if(n==1)
  {
    Sleep(2000);
    m_pSF=new CSocketFile(m_pSocket);
    m_pArOut=new CArchive(m_pSF,CArchive::store);
    m_pArIn=new CArchive(m_pSF,CArchive::load);
    msg.m_eType =LOGIN;
    msg.m_strMsg =m_strName+"|"+m_strPwd;
    msg.Serialize (*m_pArOut);
    m_pArOut->Flush();
  }
  else
  {
    GetDlgItem(IDC_BUTTON1)->SetWindowText("Login");
    GetDlgItem(IDC_BUTTON1)->EnableWindow(true);
    AfxMessageBox("网络原因,没连上服务器!");
  }
}
void CClientDlg::MyReceive()  //接收消息函数
{
  msg.Serialize (*m_pArIn);
  int i=0;
  CString str;
  switch(msg.m_eType )
  {
  case LOGINResponse:
    str=Decode(1,msg.m_strMsg);
    if(str=="FAILED")
    {
      str=Decode(2,msg.m_strMsg);
      m_pSocket->Close();
      AfxMessageBox(str);
    }
    else
    {
      Expand(true);
      GetDlgItem(IDC_BUTTON1)->SetWindowText("Login");
      GetDlgItem(IDC_BUTTON1)->EnableWindow(false);
      GetDlgItem(IDC_BUTTON_SEND)->EnableWindow(true);
    }
    break;
  case USERList:
    str=Decode(++i,msg.m_strMsg);
    m_ctrList.ResetContent();
    while(str!="END")
    {
      if(str!=m_strName)
        m_ctrList.AddString(str);
      str=Decode(++i,msg.m_strMsg);
    }
    UpdateData(FALSE);
    break;
  case CHATTING:
    MessageBox(Decode(2,msg.m_strMsg),"来自"+Decode(1,msg.m_strMsg)+"的消息:");
    break;
  case NOTICE:
    MessageBox(Decode(2,msg.m_strMsg),"来自"+Decode(1,msg.m_strMsg)+"的通知:");
    break;
  }
}

CMySocket类中的事件函数

OnReceive(int nErrorCode)。

void CMySocket::OnReceive(int nErrorCode)
{
  m_pDlg->MyReceive (); //调用主窗口的接收函数
  CSocket::OnReceive(nErrorCode);
}

上一页  1 2 3 4 5  下一页

Tags:典型 网络 数据库

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接