ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:100.22KB ,
资源ID:14074651      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/14074651.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++课程设计基于Socket通信的聊天室Word格式文档下载.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C++课程设计基于Socket通信的聊天室Word格式文档下载.docx

1、因此本次毕业设计以“面向连接的Winsock网络会话程序开发”为题,制作一个C/S聊天室程序,通过制作该程序还能更好的学习网络socket编程的相关知识。1.2聊天室的设计目标 本课题是建立聊天通信模型,设计一个聊天室软件,只是简单的利用Socket来实现端到端的通信,主要功能为:服务器端功能:1、 初始化socket, 进行单对单的点对点连接模式 2、 输入远程用户的IP地址可以进行socket连接。3、 接受用户传送来的聊天信息,然后显示在列表上。4、 接受用户传送来的连接判断命令,并向用户发出响应命令。2.总体设计 2.1 功能要求 , 支持点到点的连接,在服务器和多个客户端之间进行数据

2、传输;, 接收客户端发送的消息,并显示在一个列表框中;, 显示出连接的用户计算机名字;2.2系统主要功能和主要功能描述:聊天程序必须能够做3件事情:(1) 聊天程序要在待定的端口上通过socket发送聊天文字,并发送到开启相同程序的客户端。(2) 聊天程序要及时接受从其他地方发送过来的信息,然后把这些信息显示在列表框中去。(3) 服务器还要监控这些连接的状态,在客户主动离开或发生故障时从列表中删除相应的表项,并及时更新连接表。这些要求可以通过CSocket类提供的功能实现。从CSocket派生出两个类CListenSocket和CClientSocket,它们分别用来侦听客户的连接请求和建立与

3、客户的连接。服务器只需要一个侦听套接字CListenSocket,然后根据客户的连接请求动态创建客户套接字CClientSocket。客户套接字的数量是不可预知的,因此需要一个列表来记录。MFC的CPtrList类就能实现这种功能。3.详细设计 3.1设计流程图 CClientSocket CClientSocket 启动 启动 登陆成功 连接上 创建子套接字 客户端用户 发送message 显示 找到客户端并显示 Message Message 3.2设计实现 (1)首先启动Visual C+ 6.0,利用MFC AppWizardEXE建立一个新的MFC工程,工程名为tcpclient,在

4、MFC AppWizard Step1的时候选择Dialog based 即基于对话框,在Step4时勾选Windows Sockets选项(如图3-11),其他默认值下一步。图3-11 (2)程序主要分为三个窗口,第一个是发送数据的窗口,需要输入连接到服务器的相关设置信息,一般为IP地址,第二个是聊天信息显示窗口,也就是接受数据的窗口,该窗口显示接收到的消息;第三个是消息编辑发送窗口,需要输入你要发送的信息内容并发送,还有一个是主机名窗口,输入目标的主机名即可发送信息。图3-12 (3)下面重点介绍一下单击连接服务器按钮时的处理网络连接的函数。代码设置如下:BOOL CChatRoomDlg

5、:OnInitDialog() CDialog:OnInitDialog();ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); / Set the icon for this dialog. The framework does this automatically / when the applications main window is not a dial

6、og SetIcon(m_hIcon, TRUE); / Set big icon SetIcon(m_hIcon, FALSE); / Set small icon / TODO: Add extra initialization here InitSocket();return TRUE; / return TRUE unless you set the focus to a control (5)接下来就是创建通信隧道,绑定监听端口的函数,代码设置如下:HCURSOR CChatRoomDlg:OnQueryDragIcon() return (HCURSOR) m_hIcon;Init

7、Socket() m_socket = WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,0);if(INVALID_SOCKET = m_socket) MessageBox(创建套接字失败);return FALSE;SOCKADDR_IN addrSock;addrSock.sin_addr.S_un.S_addr = htonl(INADDR_ANY);addrSock.sin_family = AF_INET;addrSock.sin_port = htons(6000);if(SOCKET_ERROR = bind(m_socket, (SOCKADDR

8、*)&addrSock, sizeof(SOCKADDR) 绑定失败if(SOCKET_ERROR = WSAAsyncSelect(m_socket, m_hWnd, UM_SOCK, FD_READ) 注册网络读取事件失败通过WSASocket()函数,来创建socket套接字建立通信隧道,再用htons来绑定本机的6000端口,即监听端口。(6)要显示客户端接收到来自其他用户的信息,代码设置如下:void CChatRoomDlg:OnSock(WPARAM wParam, LPARAM lParam) switch(LOWORD(lParam) case FD_READ:WSABUF

9、wsabuf;wsabuf.buf = new char200;wsabuf.len = 200;DWORD dwRead;DWORD dwFlag = 0;SOCKADDR_IN addrFrom;int len = sizeof(SOCKADDR);CString str,strTemp;HOSTENT *pHost;if(SOCKET_ERROR = WSARecvFrom(m_socket, &wsabuf, 1, &dwRead, &dwFlag, (SOCKADDR *)&addrFrom, &len, NULL, NULL) 接收数据失败return ;pHost = getho

10、stbyaddr(char *)&addrFrom.sin_addr.S_un.S_addr,4,AF_INET);/str.Format(%s说:%s, inet_ntoa(addrFrom.sin_addr), wsabuf.buf);str.Format(, pHost-h_name, wsabuf.buf);str += rn;GetDlgItemText(IDC_EDIT_RECV, strTemp);str += strTemp;SetDlgItemText(IDC_EDIT_RECV,str);break;设计步骤:接受来自服务器套接字的信息数据保存到addrFrom中,调整格式

11、后将其打印到消息区。(7)当本地程序发送信息时调用的功能函数。OnBtnSend() Add your control notification handler code here DWORD dwIP;CString strSend;DWORD dwSend;int len;CString strHostName;SOCKADDR_IN addrTo;if(GetDlgItemText(IDC_EDIT_HOSTNAME, strHostName), strHostName = ) (CIPAddressCtrl *)GetDlgItem(IDC_IPADDRESS1)-GetAddress

12、(dwIP);addrTo.sin_addr.S_un.S_addr = htonl(dwIP);else pHost = gethostbyname(strHostName);addrTo.sin_addr.S_un.S_addr = *(DWORD *)pHost-h_addr_list0);addrTo.sin_family = AF_INET;addrTo.sin_port = htons(6000);GetDlgItemText(IDC_EDIT_SEND, strSend);len = strSend.GetLength();wsabuf.buf = strSend.GetBuffer(len);wsabuf.len = len +1;SetDlgItemText(IDC_EDIT_SEND, if(SOCKET_ERROR = WSASendTo(m_socket, &dwSend, 0, (SOCKADDR addrTo, sizeof(SOCKADDR), NULL, NULL) 发送数据失败return;4.系统调试 在本地编译-组建-运行后的结果,如图4-1所示:图4-1 在远程一台客户端运行同样的程序,在两台

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1