网站导航网学 原创论文 网站设计 最新系统 最新研究 原创论文 获取论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计下载 > VC与C++类别 > 正文

基于VC局域网即时聊天程序的设计与实现(代码部分)

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/05/14

网学网为需要VC与C++类别的朋友们搜集整理了基于VC局域网即时聊天程序的设计与实现(代码部分)相关资料,希望对各位网友有所帮助!

QQ交谈客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn

五、相关类的说明

1) CserverSocket 是服务器端Socket类,关于这部分的核心代码为:

BOOL CserverSocket::Init(UNI port, CChatDlg* dlg)//服务器端初始化

{

   m_uPort=port;

   m_dlg=dlg;

   if(Create(m_uPort)==FALSE)

  {

      AfxMessageBox(“Server Socket Create Error”);

      Return FALSE;

  }

  if(this->Listen==FALSE)

  {

      AfxMessageBox(“Server Listen Error”);

      Return FALSE;

  }

  m_dlg->SetDlgItemText(IDC_SHOWTEXT,”Server Has Been Set OK!”);

  return TRUE;

}

void CserverSocket::OnAccept(int nErrorCode)

{

  m_dlg->ProcessPendingAccept();

  Csocket::OnAccept(nErrorCode);

}

 

2) ClientSocket是客户端Socket类,关于这部分核心代码为:

 

//通信Socket的初始化,一些关于传输数据串行化的操作

Void CClientSocket::Init(CChatDlg* dlg)

{

   m_sfSocketFile=new CsocketFile(this);

   m_aSessionIn=new Carchive(m_sfSocketFile,Carchive::load);

   m_aSessionOut= new Carchive(m_sfSocketFile,Carchive::store);

   m_bClose=false;

   this->m_dlg=dlg;

}

//Socket接收到传输过来的数据的消息相应函数

void CClientSocket::OnReceive(int nErrorCode)

{

  Csocket::OnReceive(nErrorCode);

  Do

  {

       Cmessg temp;

       Temp.Serialize(*m_aSessionIn);

       M_dlg->m_sMsgList+=temp.m_strText;

       M_dlg->SetDlgItemText(IDC_SHOWTEXT,m_dlg->m_sMsgList);

    

  //如果有声音过来并且本机的声音设备已经准备好,则在本机发出声音

    if(temp.m_tag==l&&m_dlg->m_willchating==FALSE)

   {

       memcpy(m_dlg->m_sound.m_cBufferOut,temp.m_buffer,MAX_BUFFER_SIZE);

    }

  int linenum=((Cedit*)(m_dlg->GetDlgItem(IDC_SHOWTEXT)))->GetLineCount();

  ((Cedit*)(m_dlg->GetDlgItem(IDC_SHOWTEXT)))->LineScroll(linenum);

//如果是服务器端还需要将接收到的数据转发到其他客户端。

  If(!m_dlg->m_bClient)

  {

        for(POSITION pos=m_dlg->m_connectionList.GetHeadPosition();pos!=NULL;)

         {

           CClientSocket*t=(CClientSocket*)m_dlg->m_connectionList.GetNext(pos);

           If(t->m_hSocket!=this->m_hSocket)//不是本地socket

            {

              t->SendMessage(&temp);

              }

       }

  }

}

 while (!m_aSessionIn->IsBufferEmpty());

}

//发送数据到另外一端

BOOL CclientSocket::SendMessage(Cmessg*msg)

{

  if (m_aSessionOut !=NULL)

 {

    msg->Serialize(*m_aSessionOut);

    m_aSessionOut->Flush();

    return TRUE;

 }

else

 {

   //对方关闭了连接

   m_bClose=true;

   CloseSocket();

   M_dlg->CloseSessionSocket(0;

   Return FALSE;

  }

}

//关闭socket,需要将串行化相关的内存释放

void CclientSocket::CloseSocket()

{

  if(m_aSessionIn)

    {

        delete_m_aSessionIn;

        m_aSessionIn=NULL;

    }

   if(m_aSessionOut)

   {

       delete_m_aSessionOut;

        m_aSessionOut=NULL;

    }

   if(m_sfSocketFile)

 {

    delete_m_aSessionOut;

        m_sfSocketFile=NULL;

 }

 Close();

 M_bInit=false;

M_bClose=true;

}

//socket接收到对方socket关闭的消息后的响应函数

void CClientSocket::OnClose(int nErrorCode)

{

  m_bClose=true;

  CloseSocket();

  M_dlg->CloseSessionSocket();

  Csocket::OnClose(nErrorCode);

}

 

除了这些类以外还有音频数据处理的Csound类,还有一个数据类Cmessg类,至于这方面的代码在这里省略。

 

本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT

本文选自计算机毕业设计http://myeducs.cn
论文文章部分只是部分简介,如需了解更多详情请咨询本站客服!QQ交谈QQ3710167

原创论文

设为首页 | 加入收藏 | 论文首页 |原创论文 |
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师