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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

多人聊天程序设计.docx

1、多人聊天程序设计Internet网络程序设计实验报告基于Socket的多人聊天室程序设计姓名:莫 敌班级:软件 0904学号:U200917895指导老师:陆永忠2012.03.31目 录1 实验目的及要求 21.1 实验目的 21.2 实验要求 22 实验环境 33 实验程序设计 33.1 设计思想 33.2 程序设计流程框图 43.3 详细设计 53.3.1 界面设计 63.3.2 主要功能实现 63.4 运行结果 94 实验感想 111 实验目的及要求1.1 实验目的熟悉典型协议的通讯机制,掌握基于它们的网络系统设计方法。1.2 实验要求编写复杂的多人聊天室程序。2 实验环境编译环境:W

2、indows 7 + Visual Studio 2010 使用MFC编写。运行环境:Windows 7操作系统。3 实验程序设计3.1 设计思想根据实验的要求:在联网的多台计算机之间实现多人聊天功能,则需要程序提供一种快速、简便的网络传输服务来保证聊天的实时性。在分析、对比了传输层协议TCP协议和UDP协议后,了解到UDP协议提供的是一种无连接的、面向事务的简单传输协议,符合多人聊天室的应用需求,即程序保证实时性,同时对传输中发生的错误有一定的容忍性。而TCP协议很难保证多人聊天时数据传输的实时性。所以对于该程序实时性应放在首要地位予以考虑和设计。于是,我采用基于UDP协议的Windows

3、sockets来设计实现本实验。3.2 程序设计流程框图图1程序设计流程框图3.3 详细设计基于UDP的socket编程流程:服务器端: 创建套接字(socket)。 将套接字绑定到一个本地地址和端口上(bind)。 等待接收数据(recvfrom)。 关闭套接字。客户端: 创建套接字(socket)。 向服务器发送数据(sendto)。 关闭套接字。3.3.1 界面设计图2程序界面程序由四部分组成:聊天室聊天内容的接收栏、IP地址控件,用户聊天内容的发送栏和内容发送按钮。聊天室聊天内容的接收栏:接收并显示聊天室中聊天者发送的内容;IP地址控件:发送目的地的IP地址;用户聊天内容的发送栏:显示

4、聊天者将要发送的内容;内容发送按钮:单击后将用户聊天内容的发送栏的信息发送给目标计算机。3.3.2 主要功能实现套接字库加载:AfxSocketInit()套接字初始化:bool CChatroomDlg:initSocket(void) m_socket = socket(AF_INET,SOCK_DGRAM, 0); if (INVALID_SOCKET = m_socket) AfxMessageBox(套接字?创建失败!?); return false; SOCKADDR_IN sock_add; sock_add.sin_family = AF_INET; sock_add.sin_

5、port = htons(5000); sock_add.sin_addr.S_un.S_addr = htonl(INADDR_ANY); int m_bind; m_bind = bind(m_socket, (SOCKADDR *)&sock_add, sizeof(SOCKADDR); if (SOCKET_ERROR = m_bind) AfxMessageBox(套接字?绑定失败!?); closesocket(m_socket); return FALSE; return TRUE;接收聊天内容线程:DWORD WINAPI ReceiveProc(LPVOID lpParame

6、ter) SOCKET sock = (RecStruct *)lpParameter)-m_Rsocket1; HWND hwd = (RecStruct *)lpParameter)-m_hWd1; SOCKADDR_IN recAdd; int len = sizeof(SOCKADDR); char recBuf500; char tempBuf600; int recvResult; while (TRUE) recvResult = recvfrom(sock, recBuf, 500, 0, (SOCKADDR *)&recAdd, &len); if (SOCKET_ERROR

7、 = recvResult) break; sprintf(tempBuf, %s 说:orn%s, inet_ntoa(recAdd.sin_addr), recBuf); :PostMessage(hwd, WM_RECDATA, 0, (LPARAM)tempBuf); return 0;聊天内容发送按钮:Void CChatroomDlg:OnBnClickedBtnSend() DWORD m_IP; (CIPAddressCtrl *)GetDlgItem(IDC_IPADDRESS1)-GetAddress(m_IP); SOCKADDR_IN sendAdd; sendAdd.

8、sin_family = AF_INET; sendAdd.sin_port = htons(5000); sendAdd.sin_addr.S_un.S_addr = htonl(m_IP); CString sendStr; CString str; char tempStr500; CString tempSendStr; char hostName50; hostent * ht; GetDlgItemText(DC_Edit_Send, sendStr); GetDlgItemText(IDC_Edit_Receive, tempSendStr); gethostname(hostN

9、ame, 50); ht = gethostbyname(hostName); sprintf(tempStr, %s说:orn%s, inet_ntoa(*(struct in_addr*)ht-h_addr_list0), sendStr); str = tempStr; str = tempSendStr + str; str = str + rnrn; SetDlgItemText(IDC_Edit_Receive, str); m_Edit_Recv.LineScroll(m_Edit_Recv.GetLineCount(); sendto(m_socket, sendStr, se

10、ndStr.GetLength() + 1, 0, (SOCKADDR *)&sendAdd, sizeof(SOCKADDR); SetDlgItemText(DC_Edit_Send, );3.4 运行结果说明:为了便于测试和观察,选择127.0.0.1的发送IP地址进行单机测试。图3程序运行启动界面双击打开Chatroom.exe可执行程序后的程序启动界面如图3所示,然后在“好友IP地址”栏中输入本地回送地址127.0.0.1准备进行与好友聊天。图4用户输入将要发送的聊天内容单击鼠标激活“发送内容”栏,用户在“发送内容”栏中输入自己想要发送的聊天内容。演示结果如图4所示。图5聊天室中聊天

11、内容当有聊天者在聊天室中发送聊天内容后,程序会接收到聊天内容,并在“聊天室”栏中显示自己发送的内容和接收到的内容(与QQ一样)。由于该测试是用的本地回送IP,所以在“聊天室”栏中显示的第一条是自己发送出去的内容,第二条是自己接收到的内容。4 实验感想通过独立完成了这次实验的全部内容,我对多线程网络编程有了更全面、深刻地认识和了解,尤其是对Windows socket的掌握和编程应用。由于我对MFC较为熟悉,所以在整个实验过程中,我采用MFC进行编程来实现这个多人聊天室的网络程序。在程序实现之前,我通过网络上的基于socket网络编程资料和老师课上讲解的内容,认真全面地学习了Windows so

12、cket的运行机制和其在网络编程上的应用方法。在设计实现阶段,由于采用的是基于socket的UDP协议来进行聊天的通信,于是我直接使用的是基础SOCKET类。编码过程中主要遇到的问题集中在多线程的合理高效启动和释放方面上,由于在之前的学习和开发中对多线程的掌握和应用不足,所以该实验的大部分时间和精力也花费在了这方面上。最终的解决方案是采用了MFC封装优化的轻量级线程生成函数AfxBeginThread()来进行开发实现的。从开始的学习、设计,到遇到问题、解决问题,再到最终的实现、完成,我独立地经历实现了这次实验,对互联网构软件编程技术的理解也不只是停留在理论层面上了,而是在实践开发层次上对其有了全新的认识和掌握。在此,感谢老师课堂上详尽认真的讲解,使我对Internet程序的设计产生了浓厚的兴趣,我会继续努力,完成好后面的实验,提高自己的知识和技术水平。

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

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