- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于VC多线程聊天程序设计与实现
基于VC多线程聊天程序设计与实现
摘要:在网络越来越发达的今天,聊天已经成了许多人生活中必不可少的一部分。基于这样的需求,该文使用VC++ 6.0作为开发平台,以Windows SOCKET为基础,采用多线程技术实现一个局域网聊天工具。
关键词:VC;SOCKET;多线程;UDP
中图分类号:TP393文献标识码:A文章编号:1009-3044(2011)23-5642-03
The Designation and Implementation for Multithreaded Chat Program Based on VC++
PAN Jun, ZHANG Shi-nan, WANG Xiao
(The Academy of Armored Forces Computer Teaching and Research Section, Bengbu 233050, China)
Abstract: Today,in the Increasingly developed network, chat has become an essential part to many peoples life.Based on this demand,Based on this demand, this article uses VC++ 6.0 as the development platform and multi-threading technology, with Windows SOCKET as the foundation, to achieve a LAN chat tool.
Key words: VC; SOCKET; multi-threading; UDP
当今世界正处于信息时代,计算机网络迅猛发展。特别是在互联网越来越普及的今天,网上聊天对很多互联网用户来说已经是家常便饭了。本文以VC++ 6.0为平台,以SOCKET API函数为基础,采用多线程技术实现了一个基于UDP协议的局域网聊天工具。本聊天工具是集服务器和客户端为一体,用户通过输入需要连接主机的IP地址与其他用户进行通信,通信双方的地位是对等的。
1 工作原理
当发送端需要发送数据时,首先输入接收端的IP地址以及发送端使用的昵称,然后输入数据并单击发送。这样,数据便被写入发送端的SOCKET并且发送出去。当接收端检测到有数据到达时,就会自动调用线程函数从SOCKET中读出数据并显示给用户。这就是聊天工具的通信原理。其实现主要使用以下两种技术:
1)SOCKET:网络套接字,它在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有SOCKET接口的计算机通信。应用程序在网络上发送、接收的信息都通过这个SOCKET接口来实现。基于SOCKET的局域网通信是一种灵活的、易于实现的、低成本的方法。它可以运行在各种使用TCP/IP协议作为通讯协议的网络上。在应用开发中就像使用文件句柄一样,可以对SOCKET进行读,写操作。考虑到局域网网络质量较好,丢包率低,本系统采用基于UDP的数据报套接字(SOCK_DGRAM),它具有资源消耗小,处理速度快的优点。我们聊天用的ICQ和QQ就是基于UDP协议实现的。基于UDP的SOCKET编程模型如图1所示。
2)多线程:多线程是指一个程序中可以同时运行多个不同的线程来执行不同的任务。它通过提高资源利用效率来提高系统的效率。每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应用也较为广泛。
用户的聊天过程其实就是发送和接收数据的过程,在程序设计方面也有多种处理方式。本程序中,在接收数据时,我们调用函数recvform()来实现,然而,默认情况下SOCKET工作在阻塞模式,如果在没有数据的情况下调用recvform()函数,则主线程将会被挂起,直到有数据为止。所以,我们就需要单独创建一个线程来接收数据。从而使发送和接收两个操作同步执行。
2 程序实现
建立一个基于对话框的MFC应用程序工程,名称为Chat。本程序是集服务器和客户端为一体的,在编写程序时,笔者将它分为接收端和发送端两部分来实现。程序运行如图2所示。
2.1 接收端
在接收端,首先连接套接字库,建立SOCKET。然后创建一个线程函数来接收数据。
1)初始化SOCKET。
BOOL CChatDlg::InitSoc
您可能关注的文档
最近下载
- 车尔尼钢琴初步教程 作品599 教学与弹琴指导_12198815.pdf VIP
- 安全生产月竞赛题库(附参考答案).pptx VIP
- 2025年上海市绿化和市容管理局部分直属事业单位公开招聘笔试历年典型考题(历年真题考点)解题思路附带答案详解(5套).docx
- Unit 4 My friends Friends share第2课时冀教版(三起)(2024)英语三年级上册.pptx VIP
- 起风了sax五线谱.pdf VIP
- 影视话剧剧本_性情男女.docx
- 湘少版三年级上册英语全册教学课件.pptx
- 蚁群算法.ppt VIP
- 江苏开放大学《宏微观经济学》——计分作业2 .doc VIP
- 民族团结铸牢中华民族共同体意识PPT (3).pptx VIP
文档评论(0)