c++MFC CSocket仿QQ聊天软件,实现1对1聊天,群聊
c仿qq课程设计

c 仿qq课程设计一、课程目标知识目标:1. 学生能理解并掌握C语言中结构体和函数的基本概念及其在编程中的应用。
2. 学生能够运用C语言实现基本的聊天功能,如发送消息、接收消息等。
3. 学生了解并掌握简单的文件读写操作,实现对聊天记录的保存和加载。
技能目标:1. 学生通过本课程的学习,培养编程思维和问题解决能力,能够运用C语言设计并实现类似QQ的简易聊天程序。
2. 学生能够运用所学知识,进行程序调试和优化,提高程序性能和稳定性。
3. 学生能够通过团队协作,共同完成课程项目,提高沟通与协作能力。
情感态度价值观目标:1. 学生在学习过程中,培养对编程的兴趣和热情,提高信息素养。
2. 学生通过课程实践,认识到编程对于解决实际问题的价值,增强自信心。
3. 学生在团队合作中,学会尊重他人意见,培养集体荣誉感和责任感。
课程性质:本课程为C语言编程实践课,旨在通过实现类似QQ的聊天功能,让学生将所学理论知识运用到实际项目中。
学生特点:学生为初中生,具备一定的C语言基础,对编程感兴趣,喜欢动手实践。
教学要求:结合学生特点,课程设计应注重实践性和趣味性,引导学生主动探索,提高编程能力和团队协作能力。
通过分解课程目标,使学生在完成具体学习成果的过程中,达到课程目标。
后续教学设计和评估将以此为基础,确保课程目标的实现。
二、教学内容1. 结构体和函数复习:回顾C语言中结构体的定义和使用,以及函数的声明、定义和调用,为后续实现聊天功能打下基础。
(对应教材章节:结构体与函数)2. 聊天功能实现:- 消息发送与接收:介绍标准输入输出函数,实现用户之间的消息发送与接收。
- 用户登录与注册:结合结构体,设计用户信息数据结构,实现用户登录与注册功能。
(对应教材章节:文件操作、控制语句)3. 聊天记录保存与加载:- 文件读写:介绍文件操作函数,实现对聊天记录的保存和加载功能。
- 数据存储格式:讲解如何选择合适的数据存储格式,提高数据的可读性和可维护性。
仿QQ聊天软件--基于局域网TCP蓝精灵聊天软件的实现

西南大学计算机与信息科学学院学年设计报告课程:学年设计题目:蓝精灵聊天软件级、专业:2014级计算机科学与技术专业2班学生姓名:杨XX提交日期:2016年12月16日目录1 概述 (1)2 基本概念和方法、工具 (1)(1)基本概念 (1)(2)方法 (2)(3)开发工具 (3)3 设计方案 (3)(1)总体设计 (3)(2)界面设计 (4)(3)服务器端设计说明 (5)(4)服务器端设计 (5)(5)客户端设计 (6)(6)数据库设计 (9)4 源代码 (10)(1)服务器端 (10)(2)客户端 (22)(3)数据库 (34)5 简要的使用说明 (35)6 总结 (40)7 参考文献 (41)蓝精灵聊天软件系统1概述即时通信软件为我们提供了诸多的方便,使我们逐步享受信息时代的便捷。
我们最熟悉的即时通信软件就是QQ了,因为它几乎已经融入了我们每个人的日常生活。
由此可见,生活在信息时代的人们对即时通信、聊天软件有巨大的需求,这样的软件也将为我们节省大量的时间。
然而,基于internet的QQ已经深入人心,要想再去做可能没有任何竞争力。
此时,我们可以换一个角度,调整用户对象。
如今的时代背景下,信息的泄露早已屡见不鲜,尤其是一些大企业的内部信息,如果这些信息泄露,可能会造成巨大的经济损失,甚至将导致企业破产。
因此,为了便捷内部人员之间的交流,做这样的一个内部即时通信、聊天软件还是很有市场的。
我们的目标就是做的仿QQ的聊天软件蓝精灵,面向内部人员使用的即时通信软件。
为了方便内部人员之间便捷的交流,需要开发一款适合内部人员进行即时通信的软件,这样的软件既满足了内部人员之间便捷的交流,同时,也防止内部信息的外流,开发这样一款即时通信软件,是很有必要的。
综合以上因素,我们利用C#网络通信编程实现了基于TCP/IP可靠网络通信系统—蓝精灵聊天软件。
本软件包括两个部分,客户端和服务器。
服务器的功能主要是监听客户端发来的连接请求并予以响应、转发客户端的信息、响应客户端执行注册、登录等的操作以及关闭连接。
MFC实现简单网络聊天程序

MFC实现简单网络聊天程序MFC(Microsoft Foundation Classes)是微软公司提供的一个应用程序框架,用于开发Windows系统上的图形用户界面程序。
在此基础上,我们可以利用MFC来实现简单的网络聊天程序。
首先,我们需要创建一个MFC应用程序项目。
使用Visual Studio打开,选择MFC应用程序向导,选择对话框风格。
然后,设置对话框的布局,包括聊天消息显示框、消息输入框、发送按钮等控件。
接下来,我们需要使用Socket编程来实现网络通信功能。
MFC提供了CSocket类,我们可以使用它来处理数据的发送和接收。
在对话框类中添加成员变量m_socket,类型为CSocket。
在OnInitDialog函数中,我们需要创建Socket,并进行连接。
可以通过使用Create函数创建CSocket对象,并调用Connect函数来连接指定的地址和端口号。
例如,可以连接到本地主机上的一些端口,这样就可以进行本地测试。
然后,我们需要添加事件处理函数来处理发送和接收消息。
当发送按钮被点击时,可以通过调用Socket对象的Send函数将消息发送给服务器。
可以使用CString类来处理字符串数据。
当接收到消息时,可以通过调用Socket对象的Receive函数将消息接收到的缓冲区中。
为了提供实时地聊天消息显示功能,我们需要使用SetWindowText函数将数据显示到聊天消息显示框中。
当接收到消息时,可以将消息显示在聊天消息显示框中,同时可以使用UpdateData函数实时更新界面。
在程序结束时,我们需要断开连接并销毁Socket对象。
在析构函数中,可以调用Shutdown函数来关闭连接,然后销毁Socket对象。
除了基本的发送和接收消息功能,我们还可以添加一些其他的功能,比如可以使用菜单栏来选择连接和断开服务器,可以添加登录和注册功能等。
这些可以根据实际需求进行扩展。
总结起来,通过使用MFC应用程序框架和Socket编程,我们可以实现简单的网络聊天程序。
C语言编写网络聊天工具

C语言编写网络聊天工具C语言作为一种高效、灵活的编程语言,在网络聊天工具的开发中扮演着重要的角色。
本文将介绍如何使用C语言编写一个简单的网络聊天工具,并着重讨论实时通信、消息传递和用户界面设计等方面的问题。
1. 引言在当今社交化的时代,网络聊天工具的需求日益增长。
通过网络聊天工具,人们可以方便地与他人进行沟通和交流,促进社会、工作和学习等各个方面的发展。
而C语言作为一种经典的编程语言,其能够提供高效的性能和灵活的功能,非常适合用于网络聊天工具的开发。
2. 网络编程基础在开始编写网络聊天工具之前,我们首先需要了解一些网络编程的基础知识。
C语言提供了一系列的库函数来实现网络编程功能,例如socket、bind、listen等等。
通过这些函数,我们可以建立服务器和客户端之间的通信连接,实现消息的传递和数据的交换。
3. 实时通信实时通信是网络聊天工具的核心功能之一。
在C语言中,我们可以使用套接字(socket)来实现实时通信。
服务器和客户端之间可以通过套接字进行连接,通过send和recv函数进行消息的发送和接收。
在实现实时通信时,我们需要考虑消息的封装和解析、连接的建立和维护、错误处理等方面的问题。
4. 用户界面设计用户界面设计是网络聊天工具的另一个重要方面。
通过一个友好、直观的用户界面,用户可以方便地进行操作和进行聊天。
在C语言中,我们可以使用图形库(如GTK+或Qt)或者命令行界面来实现用户界面。
不同的界面设计方案有不同的特点和适用场景,开发者可以根据实际需求选择合适的方案。
5. 消息传递在网络聊天工具中,消息的传递是至关重要的。
C语言提供了丰富的数据结构和函数来进行消息的封装和解析。
我们可以定义一个消息结构体,包含发送者、接收者、时间戳、内容等属性,通过函数进行消息的打包和解包。
同时,我们还可以使用消息队列、线程或者信号量等技术来实现多线程处理,提高并发性能。
6. 安全性和保密性在网络聊天工具的开发中,安全性和保密性是非常重要的考虑因素。
利用MFC的Csocket类实现网络通信

服务器端的创建(6)
编辑界面,对界面上的控件点击右键,选择属性选项,可 以修改ID(把ID改为有意义的名字)和标题
界面上没有控件的地方点击右键,弹出菜单,单击“建立 类向导”(或者英文版叫Class Wizard),为每个控件添加 变量。注意控件ID、变量类型、变量名(参看下页“建立类 向导”)
s_ip=CString(“127.0.0.1”); //默认的目的ip地址
UpdateData(FALSE);
//变量的值传到界面上
c_BTNSend.EnableWindow(FALSE);//发送按钮失效
19
客户端的创建(6) “连接”按钮代码
void CLXClientDlg::OnBtnConnect()//连接按钮相关代码 {
修改控件ID,通过“新建类向导”为控件添加变量
16
客户端的创建(3)程序关闭时关闭端口
通过“建立类向导”,添加WM_DESTROY消息响应函数 1单击
2单击确定
17
客户端创建(4)关闭端口代码
添加关闭端口代码
18
客户端创建(5)
初始化时添加代码,即在 BOOL CLXClientDlg::OnInitDialog()的末尾添加下面代码
2
服务器端的创建(1)
新建工程LXServer
3
服务器端的创建(2)
创建的程序类型为“基本对话”
4
服务器端的创建(3)
选择Windows Sockts支持
5
服务器端的创建(4)
接下来几步直接点击“下一步”,直到下面对话框单击 “完成”
6
服务器端的创建(5)
界面制作7ຫໍສະໝຸດ 添加控件(以客户端界面为例)
仿QQ即时通讯应用软件开发毕业设计

仿QQ即时通讯应用软件开发摘要:本文按照软件工程的思想和开发步骤,采用C/S模式,利用SQL Server数据库,使用Visual C++开发工具设计并实现了一个仿QQ的即时通讯应用软件。
该软件实现了消息的即时传输、文本传输、语音聊天等功能,具体包括网络通信、协议包封装与解析、文件传输以及基于directsound框架的音频处理。
系统为保证语音传输的质量和效率,采用一定的声音编码格式对声音数据打包并传输到接收方。
该系统功能全面,界面美观,操作方便,具有一定的实用价值。
关键词:socket, 文字聊天,文件传输,实时语音传输,directsoundAbstract: In this paper, according to the software engineering and development steps, using C / S mode, the SQL Server database and Visual C++ language the system was designed and implement.The software has implemented the real-time transmission, transmission of text messages, voice chat and other functions, such as network communications, protocol packet encapsulation and analysis, file transfer and frame-based audio processing directsound.To ensure the quality and efficiency of the voice transmission the system adopt a certain voice encoding format for audio coding packaged and transmitted to the receiver side. The system is fully functional, beautiful interface, easy to operate, and has a certain practical value.Keywords: socket, text chat,file transfer, real-time voice transmission, directsound一、概述互联网的迅速发展不仅改变了人们的意识形态,更影响着人们的生活方式,网络元素在不知不觉中渗透到生活的每一个角落。
用C语言写聊天工具,类似于QQ
C 语言究竟能干什么序言鉴于现在已经大三了,很多同学很迷茫,自己学的东西到底能做什么,将来自己到底能干什么?我不想看着同学迷茫的面孔,特别是几个好兄弟,有几个想学习编程,但又苦苦找不到门路的兄弟,所以想写点东西,希望对大家又点略微的帮助,以尽兄弟我的微薄之力。
很多同学学了C语言之后,可能难免会有所感叹:这就是C语言!总是感觉C语言竟然能写出Windows、Linux?为了解除同学们的疑惑,也愿为同学们指点编程之道吧。
我写的这些东西采用C语言,计划通过编程实例来讲解C编程的一些知识,让大家对C能又更深一层的理解和认识。
当然,大家不要指望看了这些之后会写出一个操作系统来,但是我想,如果你认真看了的话,写一个类似与QQ的聊天程序应该不难。
本来书是假期里照顾妈妈时写的,原想是1、不让自己的水平停滞不前,温故知新(两个月的假期是很长的)2. 帮助一些同学,解决编程上的困惑3.希望妈妈快点康复4.让母亲和家里人知道自己一直都很努力,我是好样的但现在母亲已经能够不在了,所以第三点,就改为原母亲在天之灵得到慰藉,早日放下烦恼,不用惦记我们。
C语言的基本语法我是不打算再提了,很多C语言编程的书,就是将一些基本的数据类型、数据结构、语法,然后就是一些数值计算的实例,大多数都是雷同的,难免有抄袭之嫌,而且页没有多少实用价值。
本书以实用实例作为编程指导,指引大家编写真正实用的程序。
了解到大家对黑客程序、病毒、窗口类程序比较感兴趣,因此我就拿这些实例进行讲解。
基于大家基本都用Windows XP SP3,我也就在这个系统上把程序调试成功后再给大家讲解。
编程环境,我还是喜欢Visual C++ 6.0本书计划从四个大的方面来讲,这四个方面是:窗口类、文件操作类、网络类、数据库类。
都是时下流行的编程必备技术,也是软件开发者,必须掌握的技术。
中间以实例讲解,逐步学习,相信大家看完后会有很大的提高的。
第一章窗口类程序的编写这一章就先来讲解下窗口类程序的编写。
用MFC CSocket类实现的网络聊天室
12、为对话框CTsDlg的“监听”和“停止服务”两个按钮添加消息响应函数。(方法可以在对话框资源编辑窗口双击对应按钮,或使用类向导)
voidCTsDlg::OnBnClickedButtonListen()
{
// TODO: Add your control notification handler code here
}
}
5、从CSocket类派生两个套接字类,一个名为CLSocket,专用于监听客户机端的连接请求;另一个名为CCSocket,用于与客户机建立连接并交换数据。操作步骤为:选择菜单“项目”->“添加类”,在弹出的对话框中选择“MFC类”项,单击“添加”按钮;然后在弹出的“MFC添加类向导”窗口中输入类名,并选择基类为CSocket,如图所示。
if(msg.m_bClose)
{
pSocket->Close();
POSITION pos,temp;
CCSocket *pTemp;
for(pos=m_connList.GetHeadPosition();pos!=NULL;)
{
temp=pos;
pTemp=(CCSocket*)m_connList.GetNext(pos);
Sort
False
6
IDC_STATIC_NUM
Caption
聊天室在线人数:0
3、打开“MFC类向导”,按照下表设置控件在CTsDlg类中的成员变量,效果如图所示;
控件ID
成员变量名称
类别
变量类型
IDC_STATIC_NUM
m_strNum
Value
CString
IDC_EDIT_PORT
c++MFC CSocket仿QQ聊天软件,实现1对1聊天,群聊
c++/MFC CSocket仿QQ聊天软件,实现1对1聊天,群聊分类:c++ 2012-11-25 16:45 1582人阅读评论(13) 收藏举报c++C++mfcMFCqqQQsocket聊天学习,c++有2个星期了。
本来,本人是做php出身的。
做php快2年了,最近身边多了很多高手。
让自己对c开始感兴趣了,就开始学习c++了。
首先接触的就是mfc。
前几天,看到了一个博文,是有关,mfc网络编程的。
可对方,的实例只能是多对多,出于兴趣,自己改写了下它的程序,实现了点对点的聊天。
所以,本实例并非纯原创的。
这个还请大家见谅,尤其是作者。
我在他程序基础上,增加了1对1的聊天,同时还保留了群聊。
而且,最关键的是,我增加了很多备注。
很适合新手学习。
本人也是新手,还请各位高手提出宝贵建议。
先谢谢大家了。
如果要转载请注明原地址:/open520yin/article/details/8222279实例下载地址:/detail/open520yin/4808903(为了自己能有点下载积分,客户端和服务端一起打包5个积分不算贵吧。
呵呵。
)大家要是想看懂这个可能还需要先了解一下mfc的socket的一些基本使用规则我也有一篇博文写了c++/MFC 极为简单的socket实例:/open520yin/article/details/8202465MFC的CSocket编程,利用CSocket实现一个基于TCP实现一个QQ聊天程序。
///////////////////////////////////////////////////////////////////////// 服务端start ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////先讲讲服务端,一切先从服务端开始:首先就是要使用AfxSocketInit初始化winsocket,[cpp]view plaincopyprint?1. //初始化winSock库,成功则返回非0否则返回02. WSAData wsData;3. if(!AfxSocketInit(&wsData))4. {5. AfxMessageBox(_T("Socket 库初始化出错!"));6. return false;7. }m_iSocket 是一个CServerSocket*的指针 ,CServerSocket类是一个我们自己的类我会在后面给出相应代码,他继承于CSocket类。
模拟qq聊天小程序课程设计
模拟qq聊天小程序课程设计一、课程目标知识目标:1. 学生能够理解并掌握QQ聊天小程序的基本原理和功能。
2. 学生能够了解并运用程序设计中的顺序、选择和循环结构。
3. 学生能够掌握在QQ聊天小程序中实现文字、表情发送和接收的基本方法。
技能目标:1. 学生能够运用所学知识,设计并编写一个简单的模拟QQ聊天小程序。
2. 学生能够在编写程序过程中,熟练使用编程软件,掌握调试和修改程序的基本技巧。
3. 学生能够通过小组合作,提高沟通与协作能力,共同完成课程任务。
情感态度价值观目标:1. 学生培养对编程的兴趣和热情,树立编程改变生活的信念。
2. 学生在学习过程中,培养解决问题的能力和勇于尝试的精神。
3. 学生通过课程学习,认识到网络交流的重要性,提高网络素养,尊重网络道德规范。
本课程针对初中年级学生,结合教材内容,注重实用性,旨在让学生在掌握编程知识的同时,提高实际操作能力和团队协作能力。
课程目标具体、可衡量,便于学生和教师在教学过程中明确预期成果,为后续的教学设计和评估提供依据。
二、教学内容本章节教学内容主要包括以下三个方面:1. 程序设计基础知识:- 了解编程语言的基本概念,如变量、数据类型、运算符等。
- 学习程序设计的基本结构,包括顺序、选择和循环结构。
2. QQ聊天小程序功能实现:- 分析QQ聊天小程序的功能需求,明确文字、表情发送和接收的实现方法。
- 学习使用编程语言实现聊天界面设计、消息发送与接收等核心功能。
3. 实践与拓展:- 制定实践任务,分组进行模拟QQ聊天小程序的开发,培养学生的实际操作能力。
- 结合教材相关章节,拓展学习网络编程知识,了解实际应用场景。
教学内容安排和进度如下:1. 程序设计基础知识(2课时)2. QQ聊天小程序功能实现(3课时)3. 实践与拓展(2课时)本教学内容紧密结合课程目标,注重科学性和系统性,按照教学大纲逐步推进,确保学生能够学以致用,提高编程实践能力。
教学内容与教材章节紧密关联,为学生提供清晰的学习路径和丰富的学习资源。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c++/MFC CSocket仿QQ聊天软件,实现1对1聊天,群聊分类:c++ 2012-11-25 16:45 1582人阅读评论(13) 收藏举报c++C++mfcMFCqqQQsocket聊天学习,c++有2个星期了。
本来,本人是做php出身的。
做php快2年了,最近身边多了很多高手。
让自己对c开始感兴趣了,就开始学习c++了。
首先接触的就是mfc。
前几天,看到了一个博文,是有关,mfc网络编程的。
可对方,的实例只能是多对多,出于兴趣,自己改写了下它的程序,实现了点对点的聊天。
所以,本实例并非纯原创的。
这个还请大家见谅,尤其是作者。
我在他程序基础上,增加了1对1的聊天,同时还保留了群聊。
而且,最关键的是,我增加了很多备注。
很适合新手学习。
本人也是新手,还请各位高手提出宝贵建议。
先谢谢大家了。
如果要转载请注明原地址:/open520yin/article/details/8222279实例下载地址:/detail/open520yin/4808903(为了自己能有点下载积分,客户端和服务端一起打包5个积分不算贵吧。
呵呵。
)大家要是想看懂这个可能还需要先了解一下mfc的socket的一些基本使用规则我也有一篇博文写了c++/MFC 极为简单的socket实例:/open520yin/article/details/8202465MFC的CSocket编程,利用CSocket实现一个基于TCP实现一个QQ聊天程序。
///////////////////////////////////////////////////////////////////////// 服务端start ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////先讲讲服务端,一切先从服务端开始:首先就是要使用AfxSocketInit初始化winsocket,[cpp]view plaincopyprint?1. //初始化winSock库,成功则返回非0否则返回02. WSAData wsData;3. if(!AfxSocketInit(&wsData))4. {5. AfxMessageBox(_T("Socket 库初始化出错!"));6. return false;7. }m_iSocket 是一个CServerSocket*的指针 ,CServerSocket类是一个我们自己的类我会在后面给出相应代码,他继承于CSocket类。
[cpp]view plaincopyprint?1. //创建服务器端Socket、采用TCP2. m_iSocket = new CServerSocket();3. if(!m_iSocket)4. {5. AfxMessageBox(_T("动态创建服务器套接字出错!"));6. return false;7. }实例socket好了,就要创建套接字了。
这里的端口要和客户端连接的端口一致,不然就连接不上。
而且,这个端口,要和服务器的其他软件端口不能冲突,怎么去判断冲突,可以自己谷歌一下,很简单的。
我这里就直接写死了,这个端口一般不会被占用的。
[cpp]view plaincopyprint?1. //端口使用89892. if(!m_iSocket->Create(8989))3. {4. AfxMessageBox(_T("创建套接字错误!"));5. m_iSocket->Close();6. return false;7. }创建好了就要,开始监听这个端口了。
这个是一般的,socket必须建立的几个过程。
[cpp]view plaincopyprint?1. if(!m_iSocket->Listen())2. {3. AfxMessageBox(_T("监听失败!"));4. m_iSocket->Close();5. return false;6. }走完上面的几个步骤,这样,服务端,就能和客户端接受和发送消息了。
大家可能会很奇怪,上面那个怎么没有绑定端口,直接listen了。
这个我那个简单socket里有介绍,因为,Create 方法已经包含了Bind 方法,如果是以Create 方法创建socket的前提下不能再调用Bind ,要不一定出错。
然后重载ExitInstance,退出时对进行清理[cpp]view plaincopyprint?1. int CNetChatServerApp::ExitInstance()2. {3. if(m_iSocket)4. {5. delete m_iSocket;6. m_iSocket = NULL;7. }8. return CWinApp::ExitInstance();9. }我再去看看上面用到的CServerSocket类,这个是用来,服务端接收消息用的。
开启了监听这里的OnAccept()方法就会一直被循环调用。
这个方法其实是重写CSocket类的OnAccept()方法。
只要socket开启了监听,OnAccept就会被循环调用,我那个简单的socket实例,是开启一个while进行死循环来达到这个目的。
大家不要介意,我也是新手。
这里OnAccept方法为什么能一直被循环执行,我到现在也没弄明白,如果有高手知道请告诉我下。
但是我知道,这里就是如果服务器有收到消息就会调用这里,提示ClientSocket接受消息。
[cpp]view plaincopyprint?1. void CServerSocket::OnAccept(int nErrorCode)2. {3. //接受到一个连接请求4. CClientSocket* theClientSock(0);5. //初始化在初始化里把m_listSockets赋值到m_pList里6. theClientSock = new CClientSocket(&m_listSockets);7. if(!theClientSock)8. {9. AfxMessageBox(_T("内存不足,客户连接服务器失败!"));10. return;11. }12. Accept(*theClientSock); //接受13. //加入list中便于管理,这个很关键14. m_listSockets.AddTail(theClientSock);15. CSocket::OnAccept(nErrorCode);16. }OnAccept收到消息,就会实例CClientSocket类,这里其实主要是,服务端发送消息和接受消息的主要部分。
也是服务端,最核心的部分。
OnAccept收到消息后,就会通知CClientSocket来接受消息。
注意了,CserverSocket是接收消息而CClientSocket是接收消息。
接收,接受还是有区别的。
这个关系我们要理解清楚。
这个是我自己的理解,不时候是否有错误。
还请高手赐教。
我学c++最多不过半个月,有些东西,都真是靠自己的理解。
下面的接受消息OnReceive 方法怎么调用的,我也有点模糊,这个方法好像是重写Socket的。
就有数据来,他就会自动调用。
m_listSockets.AddTail(theClientSock);这个很关键,m_listSockets是CPtrList类型,我对这个也还不太了解,经过我一些认识,这个是存放socket连接,成功一个就会加入这个,是一个链表。
用来存放所有连接到服务器的socket连接的,这个后面会经常用到。
下面的HEADER是一个结构体,定义如下[cpp]view plaincopyprint?1. typedef struct tagHeader{2. int type ;//协议类型3. int nContentLen; //将要发送内容的长度4. char to_user[20];5. char from_user[20];6. }HEADER ,*LPHEADER;这个结构体,要和客户端保持一致,不然我担心会有问题。
就算没有问题,我估计转换也麻烦。
尽量保持一直吧,这个也算是一种协议吧。
客户端传输的时候,也传递这样的结构体。
下面的方法,具体就看看备注吧。
我在备注里讲解了。
但是注意的是,我们客户端发送消息,是一次发送2个消息,先发送一个头部消息,这个头部消息是一个结构体,是服务端和客户端一种自定义的协议。
这样的好处是,能节约资源,并且提前知道内容的长度进行申请内存空间。
能先知道对应的消息类型,然后再进行转换和读取。
这个头部接受好了,然后再去接受正式的数据。
这个,可能你去看看。
服务端可能会更容易了解。
[cpp]view plaincopyprint?1. void CClientSocket::OnReceive(int nErrorCode)2. {3. //有消息接收4. //先得到信息头5. HEADER head; //定义客户端发送的过来的一样的结构体6. int nlen = sizeof HEADER; //计算结构体大小7. char *pHead = NULL; //用于接受的结构体8. pHead = new char[nlen]; //申请和结构体一样大小的内存空间9. if(!pHead)10. {11. TRACE0("CClientSocket::OnReceive 内存不足!");12. return;13. }14. memset(pHead,0, sizeof(char)*nlen ); //初始化15. Receive(pHead,nlen); //收到内容,并赋值到pHead中,指定接受的空间大小16. //以下是将接收大结构体进行强制转换成我们的结构体,17. head.type = ((LPHEADER)pHead)->type;18. head.nContentLen = ((LPHEADER)pHead)->nContentLen;19. //head.to_user 是char[]类型,如果不进行初始化,可能会有乱码出现20. memset(head.to_user,0,sizeof(head.to_user));21. //讲接受的数据转换过后并赋值到head.to_user,以下同22. strcpy(head.to_user,((LPHEADER)pHead)->to_user);23. memset(head.from_user,0,sizeof(head.from_user));24. strcpy(head.from_user,((LPHEADER)pHead)->from_user);25.26.27. delete pHead; //使用完毕,指针变量的清除28. pHead = NULL;29.30. //再次接收,这次是接受正式数据内容31. //这个就是,头部接受到的内容长度,这样能对应的申请内容空间32. pHead = new char[head.nContentLen];33. if(!pHead)34. {35. TRACE0("CClientSocket::OnRecive 内存不足!");36. return;37. }38. //这里是一个验证,防止内存错误。