网学网为需要VC与C++类别的朋友们搜集整理了基于VC局域网即时聊天程序的设计与实现(代码部分)相关资料,希望对各位网友有所帮助!
客服咨询,网学网竭诚为您服务,本站永久域名: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 |