对CSocket类使用的理解

今天看了本书上的例程,做的是局域网聊天工具,用的Socket知识。前面介绍了Socket相关的函数,这些之前都了解。不过真正实现的时候却是用了封装的CSocket类,然后绕来绕去感觉一头雾水,花了好长时间研究了它的代码。

首先它的主类继承自CSocket类,然后注意到重载了三个函数:

virtual void OnReceive(); //接收到数据

virtual void OnClose(); //关闭

virtual void OnAccept(); //接收新用户

然后在这三个重载的函数的实现是分别发送SOCKET_EVENT消息给窗口:

pWnd -> SendMessage(SOCKET_EVENT,(long)this,RETR/CLOSE/ACCEPT);

接着,程序定义了消息SOCKET_EVENT,并定义了消息映射:

ON_MESSAGE(SOCKET_EVENT,OnSocket)

最后添加OnSocket函数进行消息处理。处理中对消息的lParam进行switch-case判断处理。

那么现在,我的理解是:那三个重载的函数,应该是CSocket类中封装好的,自己创建了线程在里面,例如一旦缓冲区接收到消息,它就会自动调用OnReceive函数,启动接收的线程,原理应该和串口控件MSComm一样的。重载之后,一旦自动调用,会发不同参数的消息给窗口,最后窗口对消息进行判断处理。而对于Send功能怎没有对应的线程,而是定义个按钮作为启动事件。一般都是把Send作为主动功能,而Receive作为线程。

另外,程序使用了CS架构编写,和我之前看的P2P不一样,主要是服务器端是负责转发的功能,因此会先Receive读取数据,再Send转发数据。转发还分群发和私聊。而客户端这边Receive和Send是分开的,都是和服务器发生关系。

时间: 2025-01-01 12:38:05

对CSocket类使用的理解的相关文章

关于C#中派生类调用基类构造函数的理解

(1)当基类中没有自己编写的构造函数时,派生类默认条用基类的构造函数 (2)当基类中有自己编写的构造函数时,要在基类中添加无参的构造函数 Java代码   public class MyBaseClass { public MyBaseClass() { } public MyBaseClass(int i) { Console.WriteLine("我是基类带一个参数的构造函数"); } } public class MyDerivedClass : MyBaseClass { pu

转 关于C#中派生类调用基类构造函数的理解

关于C#中派生类调用基类构造函数的理解 .c#class       本文中的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1.  当基类中没有自己编写构造函数时,派生类默认的调用基类的默认构造函数 Ex: public class MyBaseClass    {    } public class MyDerivedClass : MyBaseClass    {        public MyDerivedClass()        {            Con

Python学习 Day14 python 类和元类(metaclass)的理解和简单运用

python 类和元类(metaclass)的理解和简单运用 (一) python中的类 首先这里讨论的python类,都基于继承于object的新式类进行讨论. 首先在python中,所有东西都是对象.这句话非常重要要理解元类我要重新来理解一下python中的类 class Trick(object): pass 当python在执行带class语句的时候,会初始化一个类对象放在内存里面.例如这里会初始化一个Trick对象 这个对象(类)自身拥有创建对象(通常我们说的实例,但是在python中

Java中Class和单例类的作用与类成员的理解

Java中Class类的作用与深入理解 在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识.这个信息跟踪着每个对象所属的类.JVM利用运行时信息选择相应的方法执行.而保存这些信息的类称为Class.可能容易产生混淆,容易想到class.不过二者没什么关系,class不过是描述类的一个关键字.而Class却是保存着运行时信息的类. 它能做什么?Class类可以帮助我们在程序运行时分析类,说白了就是获取类中的值.可能瞬间就想到了反射,没错!Class一般就是和反射配套使

MFC基于TCP协议的CSocket类套接字服务器端代码示范

MFC基于TCP协议的CSocket类套接字服务器端代码示范 https://blog.csdn.net/txwtech/article/details/93417667 原文地址:https://www.cnblogs.com/txwtech/p/11074805.html

浅谈元类(个人理解)

浅谈元类(个人理解) 我们知道在python中一切皆对象(object),那么所以有的对象都成了object的子类,那么object类又是由谁创建的呢? 实际上,能够创建类的类,叫元类.还有一个概念就是:元类创建了object类,同时又是object类的子类(这是什么鬼?我们就不去考虑这个逻辑了,已经完美解决了先有鸡还是先有蛋的问题了). 元类实际还是所有类的创建者,即使所有类(包括元类自己)都是object的子类,他们的关系如下: Interesting...... 原文地址:https://

python 类和元类(metaclass)的理解和简单运用

(一) python中的类 首先这里讨论的python类,都基于继承于object的新式类进行讨论. 首先在python中,所有东西都是对象.这句话非常重要要理解元类我要重新来理解一下python中的类 class Trick(object): pass 当python在执行带class语句的时候,会初始化一个类对象放在内存里面.例如这里会初始化一个Trick对象 这个对象(类)自身拥有创建对象(通常我们说的实例,但是在python中还是对象)的能力. 为了方便后续理解,我们可以先尝试一下在新式

【C/C++语法外功】类的静态成员理解

例1  孙鑫視頻學習  Oct.27th 2009  Skyseraph 例子1.0 #include "iostream" class Point { public: void output() {} static void init() {}  //静态函数,不属于某个具体的对象,即在未产生Point任何对象时,这个类已经存在于程序的代码区 } void main() { /*法一 Point pt; //构造对象 pt.init(); pt.output(); */ //法二 P

String类的深入理解(未完待续)

String不是基本数据类型,String和8种包装类型是不可变类.String和8种基本数据类型采用值传递. 0.不可变类的设计原则 public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[];//数组是引用传递 /*