自制即时通信系统:socket网络编程(4)

之前大概介绍了IM服务端的构架和部分代码,其中对于具体信息包的用例函数没有列出来,有兴趣和时间的可以直接玩玩。
现在来介绍客户端的构架,因为这是给用户用的,当然要有界面,这里选择了MFC对话框应用程序,具体构架如下:
首先,从socket类的继承关系开始:
这一部分我是参考资料书的,windows sockets类的继承关系如下:

CSocket类:MFC已有的类,作为基类;
CCommunicatingSocket类:主要封装了底层通信函数,如:rio_writeline()、rio_readinitb、rio_readlineb()这些都是直接引用的《深入理解计算机系统》的11,12章部分介绍的rio健壮包函数;
CTCPSocket类:是对客户端套接字的封装,封装的函数有SetupTCPClientSocket(const char *host, const char *service)等;
CTCPServerSocket类:是对服务器端套接字的封装,如前所述,客户端也有一个服务器套接字用来不断接受服务器即时发来的信息,且这个socket的端口为客户端socket的port+1000(这是笔者为了方便才这样做的)。
此外:为了方便起见还可以定义一个CError类,用来处理与socket相关的错误;
关于类的构架就说到这里,当然,还有一些对话框类就不一一表述了。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

接下来介绍的是客户端的线程模式,由于是MFC对话框程序,主线程自然不用说,此外,其余的线程的生成方式如下如:


在线上报线程:每sleep一段时间就像服务器发送一个信息包,告诉它咱还是正常在线用户。
聊天信息接收线程:循环接受UDP包,一旦收到消息,就给主线程发送消息,通知有好友找你啦,弹个对话框呗。
即时接收服务器信息线程:接受服务器不定时的突发信息,比如某某好友突然上线或是下线,或者添加询问通知等。

以上是客户端的主体构架,至于具体的编程,在接下来的文章中我会以功能用例的形式一一介绍;

你可能感兴趣的:(windows,网络编程,VC,即时通信,Sockets)