C课程设计聊天系统

上传人:大米 文档编号:431607385 上传时间:2022-09-15 格式:DOC 页数:13 大小:74KB
返回 下载 相关 举报
C课程设计聊天系统_第1页
第1页 / 共13页
C课程设计聊天系统_第2页
第2页 / 共13页
C课程设计聊天系统_第3页
第3页 / 共13页
C课程设计聊天系统_第4页
第4页 / 共13页
C课程设计聊天系统_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《C课程设计聊天系统》由会员分享,可在线阅读,更多相关《C课程设计聊天系统(13页珍藏版)》请在金锄头文库上搜索。

1、C+聊天系统一、该聊天系统需要实现的功能:1、用户之间能够进行私聊。2、输出聊天信息。3、显示聊天信息。4、自动显示所有在线成员。二、开发环境操作系统:Windows xp2000IDE:vc 6.0语言:C+框架:MFC三、结构为了保证聊天信息的实时性和系统的效率,聊天室系统使用C/S结构,由服务器端程序和客户端程序两部分组成。服务器端和客户端通过TCP协议进行通信。其中,客户端用于显示来自服务器端的聊天信息,接收用户的输入信息并发送给服务器端,服务器端用于接受来自客户端的信息,处理之后转发给聊天室中的其他用户。TCP:Transmission Control Protocol 传输控制协议

2、TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的运输层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。四、基本流程启动服务器,服务器开始监听。客户端向服务端发送连接请求,如果该客户已经登陆,则服务器向客户端反馈登录失败

3、信息,如果登录成功,服务器将客户的登录信息记入服务器日志中。登陆成功后,用户界面的用户列表里将显示其他已经登录的用户,用户可以双击其他用户名,向他发送信息。发送的信息经过服务器发送至目的用户。当用户登出时,服务器将其用户名发送给其他用户,其他客户端将其从用户列表中删除五、部分主要程序代码客户端头文件 ClientDlg.hclass CClientDlg : public CDialog/ Constructionpublic:CClientDlg(CWnd* pParent = NULL);/ standard constructor/ Dialog Data/AFX_DATA(CClien

4、tDlg)enum IDD = IDD_CLIENT_DIALOG ;CListBoxm_LITUSER;CEditm_edUID;CEditm_edSEND;CEditm_edREVER;CEditm_edREV;CButtonm_btStop;CButtonm_btStart;CButtonm_btSEND;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CClientDlg)protected:virtual void DoDataExchange(CDataExchange* pDX);/

5、DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:CClientSocketm_sktClient;BOOLm_bIsLoginOK;CStringm_strUID; protected:void DisposeLoginout(NET_PACK *path);void DisposeUserin(NET_PACK *pack);void DisposeTransmitErr(NET_PACK *path);void DisposeTransmit(NET_PACK *path);void DisposeLoginStopSvr(NET_

6、PACK *path);void DisposeLoginErr(NET_PACK *path);void BTSend();void DisposeLoginOK(NET_PACK* path);void UserLogout();bool UserLogin();HICON m_hIcon;/ Generated message map functions/AFX_MSG(CClientDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint

7、();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnBUTTONStart();afx_msg void OnChangeEditUid();afx_msg void OnBUTTONStop();afx_msg LRESULT OnNetReceive(WPARAM wParam, LPARAM lParam);afx_msg void OnButtonSend();afx_msg void OnClose();afx_msg void OnSelchangeListUser();/AFX_MSGDECLARE_MESSAGE_MAP();

8、客户端源文件部分代码void CClientDlg:OnBUTTONStop() / TODO: Add your control notification handler code hereUserLogout();bool CClientDlg:UserLogin()/登陆 m_edUID.GetWindowText(m_strUID); if(m_strUID.IsEmpty() :AfxMessageBox(_T(UID cant be null !); return false; if(!m_sktClient.Create() :AfxMessageBox(_T(do not cr

9、eat!); return false; if(!m_sktClient.Connect(_T(127.0.0.1),5555) :AfxMessageBox(_T(connect error!); NET_PACK path;memset(&path,0,sizeof(path);path.fun=LOGIN; lstrcpy(path.SenderID,m_strUID.GetBuffer(m_strUID.GetLength();m_strUID.ReleaseBuffer(); m_sktClient.Send(&path,sizeof(NET_PACK); / m_LITUSER.A

10、ddString() return true;void CClientDlg:UserLogout()NET_PACK pack;memset(&pack,0,sizeof(NET_PACK);pack.fun=LOGOUT;lstrcpy(pack.SenderID,m_strUID.GetBuffer(m_strUID.GetLength();m_sktClient.Send(&pack,sizeof(NET_PACK);m_sktClient.Close();m_strUID=_T();m_edUID.SetWindowText(m_strUID); m_edUID.EnableWind

11、ow(TRUE);m_btStart.EnableWindow(TRUE);m_btSEND.EnableWindow(FALSE);m_edSEND.EnableWindow(FALSE);m_edREVER.EnableWindow(FALSE);m_btStop.EnableWindow(FALSE);LRESULT CClientDlg:OnNetReceive(WPARAM wParam, LPARAM lParam) LRESULT ret=0; NET_PACK *path=(NET_PACK *)wParam;switch(path-fun)case LOGINOK:Dispo

12、seLoginOK(path);break; case LOGINERR:DisposeLoginErr(path);break; case STOPSERVER:DisposeLoginStopSvr(path);break; case TRANSMIT:DisposeTransmit(path);break; case TRANSMITERR:DisposeTransmitErr(path);break; case USERIN:DisposeUserin(path); break; case USEROUT:DisposeLoginout(path);break;delete path;

13、return ret;void CClientDlg:DisposeLoginOK(NET_PACK *path) m_bIsLoginOK=true; m_edUID.EnableWindow(FALSE);m_btStart.EnableWindow(FALSE);m_btSEND.EnableWindow(TRUE);m_edSEND.EnableWindow(TRUE);m_edREVER.EnableWindow(TRUE);m_btStop.EnableWindow(TRUE);void CClientDlg:BTSend()/发送信息 CString strSend,strRcv

14、erID;/发送的内容以及接收对象 m_edSEND.GetWindowText(strSend); m_edREVER.GetWindowText(strRcverID); if(strSend.IsEmpty()|strRcverID.IsEmpty() return; NET_PACK pack; memset(&pack,0,sizeof(NET_PACK); pack.fun=TRANSMIT; lstrcpy(pack.ReverID,strRcverID.GetBuffer(strRcverID.GetLength(); lstrcpy(pack.SenderID,m_strUID.GetBuffer(m_strUID.GetLength(); lstrcpy(pack.Content,strSend.GetBuffer(strSend.Get

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号