vc网络聊天软件_课程设计(编辑修改稿)内容摘要:

CMessg temp。 (*m_aSessionIn)。 m_dlgm_sMsgList+=+\r\n。 m_dlgm_tmpMsgList=+\r\n。 m_dlgSetDlgItemText(IDC_SHOWTEXT,m_dlgm_sMsgList)。 FILE* fp。 fp = fopen(,a+)。 fputs(m_dlgm_tmpMsgList,fp)。 fclose(fp)。 m_dlgSetDlgItemText(IDC_SHOWTEXT,m_dlgm_sMsgList)。 int linenum=((CEdit*) 21 (m_dlgGetDlgItem(IDC_SHOWTEXT)))GetLineCount()。 ((CEdit*) (m_dlgGetDlgItem(IDC_SHOWTEXT)))LineScroll(linenum)。 if(!m_dlgm_bClient) { for(POSITION pos=m_dlg()。 pos!=NULL。 ) { CClientSocket *t=(CClientSocket*) m_dlg(pos)。 if(tm_hSocket!=thism_hSocket) { tSendMessage(amp。 temp)。 } } } } while(!m_aSessionInIsBufferEmpty())。 } 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。 thism_dlg=dlg。 22 } /* *SendMessage()函数的实现 *主要功能: *将信息串行化 */ BOOL CClientSocket::SendMessage(CMessg *msg) { if(m_aSessionOut!=NULL) { msgSerialize(*m_aSessionOut)。 m_aSessionOutFlush()。 return TRUE。 } else { m_bClose=true。 //对方关闭了连接 CloseSocket()。 m_dlgCloseSessionSocket()。 return FALSE。 } } /* *CloseSocket()函数的实现 *主要功能: *关闭套接字的连接 23 */ 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_sfSocketFile。 m_sfSocketFile=NULL。 } Close()。 m_bInit=false。 m_bClose=true。 } /* *OnClose()函数的实现 *主要功能: *关闭套接字的连接 */ void CClientSocket::OnClose(int nErrorCode) { 24 m_bClose=true。 CloseSocket()。 m_dlgCloseSessionSocket()。 CSocket::OnClose(nErrorCode)。 } /* *GetLocalHostName()函数的实现 *主要功能: *获得本地计算机的名称 */ int CClientSocket::GetLocalHostName(CString amp。 sHostName) { char szHostName[256]。 int nRetCode。 nRetCode=gethostname(szHostName,sizeof(szHostName))。 if(nRetCode!=0) { //产生错误 sHostName=_T(没有取得 )。 return GetLastError()。 } sHostName=szHostName。 return 0。 } /* *GetIpAddress()函数的实现 *主要功能: *取得本地 IP 地址 */ int CClientSocket::GetIpAddress(const CString amp。 sHostName,CString 25 amp。 sIpAddress) //获得本地 IP { struct hostent FAR *lpHostEnt=gethostbyname(sHostName)。 if(lpHostEnt==NULL) { //产生错误 sIpAddress=_T()。 return GetLastError()。 } LPSTR lpAddr=lpHostEnth_addr_list[0]。 if(lpAddr) { struct in_addr inAddr。 memmove(amp。 inAddr,lpAddr,4)。 sIpAddress=i_ntoa(inAddr)。 //转换为标准格式 if(()) sIpAddress=_T(没有取得 )。 } return 0。 } /* * GetIpAddress ()函数的实现 *主要功能: *获得本地 IP 地址 */ int CClientSocket::GetIpAddress(const CString amp。 sHostName,BYTE amp。 f0, BYTE amp。 f1,BYTE amp。 f2,BYTE amp。 f3)//获得IP 地址 { 26 struct hostent FAR *lpHostEnt=gethostbyname(sHostName)。 if(lpHostEnt==NULL) { //产生错误 f0=f1=f2=f3=0。 return GetLastError()。 } LPSTR lpAddr=lpHostEnth_addr_list[0]。 //获取 IP if(lpAddr) { struct in_addr inAddr。 memmove(amp。 inAddr,lpAddr,4)。 f0=。 f1=。 f2=。 f3=。 } return 0。 } CString CClientSocket::ErrorReason(int tag) //错误信息的宏定义 { CString result。 switch(tag) { case WSANOTINITIALISED: result=A successful AfxSocketInit must occur before using this API.。 break。 27 case WSAENETDOWN: result=The work subsystem failed。 break。 case WSAEADDRINUSE: result=The specified address is already in use。 break。 case WSAEINPROGRESS: result=A blocking Windows Socket call is in progress。 break。 case WSAEADDRNOTAVAIL: result=The specified address is not available from the local machine。 break。 case WSAEAFNOSUPPORT: result=Address in the specified family cannot be used with this socket。 break。 case WSAECONNREFUSED: result=The attempt to connect eas rejected。 break。 case WSAEDESTADDRREQ: result=A destination address is requireed。 break。 case WSAEFAULT: result=The nSockAddrLen arguement is incorrect。 break。 case WSAEINVAL: result=Invalid host address。 break。 28 case WSAEISCONN: result=The socket is already connected。 break。 case WSAEMFILE: result=No more file descriptions are available。 break。 case WSAENETUNREACH: result=The work cannot be reached from this host at this time。 break。 case WSAENOBUFS: result=No buffer space is socket cannot be connected。 break。 case WSAENOTSOCK: result=The descriptor is not a socket。 break。 case WSAETIMEDOUT: result=Attempt to connect timed out without establishing a connection。 break。 case WSAEWOULDBLOCK: result=The socket is marked as nonblocking and the connnection cannot be pleted immediate。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。