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

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

 2010-02-19 20:34:02 来源:WEB开发网   
核心提示:3、通信协议设计验证,客户端发送LOGIN消息,典型网络数据库系统软件设计(2),服务器回应 LOGINResponse消息;通信,客户端发送CHATTING 或 NOTICE 消息,CSocketFile * m_pSF; //套接字文件对象指针,CMsg msg;//消息类对象CString Decode(int

3、通信协议设计

验证。客户端发送LOGIN消息,服务器回应 LOGINResponse消息;

通信。客户端发送CHATTING 或 NOTICE 消息,服务器端根据接收到的消息,发送CHATTING,NOTICE或 USERList 消息。

4、服务器设计

<1>、建立工程

①、用MFC AppWizard(exe) 新建一个“单个文档”的工程;

②、在Step 2 of 6中,选 “查看数据库不使用文件支持”,点击“Data Source..”按钮,然后在弹出的对话框中选 “DAO”类型,再浏览选择数据库文件Data.mdb. 按确定,再在弹出的窗口选User表;

③、点击Next到Step 4 of 6,选“windows Sockets”。网络功能支持;

④、按“NEXT“,最后点击 “完成”;

<2>、在CSuperServerView中添加下列成员:int m_iPort;//服务器端口
  CSocketListen * m_pSocket; //监听套接字。
  CSocketClient m_SocketClient[Max];  //跟客户端通信的套接字。
  CArchive * m_pArOut; //发送消息时的序列化文档对象指针。
  CArchive * m_pArIn;  //接收消息时的序列化化文档对象指针。
  CSocketFile * m_pSF;  //套接字文件对象指针。
  CMsg msg;//消息类对象
  CString Decode(int n,CString strMsg); //消息的解码函数
  void SendUserList();
  bool CheckLogin(CSocketClient *pClient);
  void MyReceive(CSocketClient *pClient);
  void MyClose(CSocketClient *pClient);
  void MyAccept();
<3>、CSuperServerView类的关键成员函数:

void CSuperServerView::MyReceive(CSocketClient *pClient)
{
    m_pSF=new CSocketFile(pClient);
    m_pArIn=new CArchive(m_pSF,CArchive::load);
    msg.Serialize (*m_pArIn);
    int i;
    bool bOK=false;

    switch(msg.m_eType )
    {
    case LOGIN:     //处理用户登录。
    {  
      m_pSF=new CSocketFile(pClient);
      m_pArOut=new CArchive(m_pSF,CArchive::store);
      msg.m_eType =LOGINResponse;
      if(CheckLogin(pClient))
      {
        if(!pClient->m_bBoss)
        {
          msg.m_strMsg="GOOD|欢迎!";
          bOK=true;
        }
        else
        {
          msg.m_strMsg="GOOD|BOSS";
          bOK=true;
        }
      else
      {
        msg.m_strMsg="FAILED|验证失败!";
      }
      msg.Serialize (*m_pArOut);
      m_pArOut->Flush ();

      if(bOK) SendUserList();
      break;
    }
    case CHATTING:  //处理普通消息
    {
     for(i=0;i<Max;i++)
        {
          if(m_SocketClient[i].m_bBusy)
       {
        if(m_SocketClient[i].m_strName ==Decode(1,msg.m_strMsg))
        {
          m_pSF=new CSocketFile(&m_SocketClient[i]);
          m_pArOut=new CArchive(m_pSF,CArchive::store);
          msg.m_strMsg=pClient->m_strName+"|"+Decode(2,msg.m_strMsg);
          msg.Serialize (*m_pArOut);
          m_pArOut->Flush ();
          break;
        }
        }
     }
     break;
      }
    case NOTICE: //处理广播消息。
      {
      msg.m_strMsg=pClient->m_strName+"|"+Decode(2,msg.m_strMsg);
      for(i=0;i<Max;i++)
      {
        if(m_SocketClient[i].m_bBusy &&
         m_SocketClient[i].m_strName != pClient->m_strName)
        {
          m_pSF=new CSocketFile(&m_SocketClient[i]);
          m_pArOut=new CArchive(m_pSF,CArchive::store);
          msg.Serialize (*m_pArOut);
          m_pArOut->Flush ();
          }
       }
      break;
      }
    }
}
void CSuperServerView::MyAccept()
{
  for(int i=0;i<Max;i++)
  {
    if(!m_SocketClient[i].m_bBusy)
    {
      m_pSocket->Accept (m_SocketClient[i]);
      m_SocketClient[i].GetView (this);
      break;
    }
  }
}
void CSuperServerView::OnStartServer()  //开始服务
{
  m_pSocket=new CSocketListen(this);
  m_pSocket->Create (m_iPort,SOCK_STREAM);
  m_pSocket->Listen ();
  m_staState.SetWindowText("正在监听......");
}
void CSuperServerView::OnStopServer()  //关闭服务
{
  if(m_pSocket) m_pSocket->Close ();
  for(int i=0;i<Max;i++)
  {
    if(m_SocketClient[i].m_bBusy)
    {
      m_SocketClient[i].Close();
      m_SocketClient[i].m_bBusy=false;
    }
  }
  m_staState.SetWindowText("服务关闭");
}

上一页  1 2 3 4 5  下一页

Tags:典型 网络 数据库

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