8.4.1 客户端与服务器的连接
客户端要和服务器进行通信,首先必须要与服务器建立TCP/IP连接,只有与服务器建立了连接,才有进一步通信的可能。在客户端,本系统使用VC中的CSocket类和服务器建立socket连接,从而达到访问服务器之目的。
8.4.2 客户端与服务器的连接
8.4.2.1 用户登录模块
用户登录服务器时,需要提供用户名和密码以及服务器的IP地址,向服务器发送登录请求,如果服务器验证通过,即可成功登录服务器,进入客户端主界面,否则不能登录。用户登录流程如图8-4所示。
定义协议格式为11用户ID/好友ID/好友昵称/在线状态/好友头像/所属组别,协议头recestr.Left(2)=11。
图8-4 用户登录流程图
8.4.2.2 呼叫好友模块
即时通信系统中用户之间如果要进行通信,必须要建立连接。首先呼叫好友,向好友发出连接请求并等待服务器提供好友的通信状态,如果好友接受连接,双方建立连接成功才能进行其他的通信操作,如果好友不在线或者正在通话中,用户会收到服务器端发来的提示,不能与好友建立连接,也就不能进行通信。用户呼叫好友的流程如图8-5所示。
定义协议格式为50/对方ID/对方昵称,协议头recestr.Lef t(2)=50。
图8-5 用户登录流程图
8.4.2.3 发送文本消息
发送文本消息是即时通信系统最基本、最重要的功能。通信双方建立连接后,可以在文字消息框内写入文本消息并发送,双方的聊天内容都会显示在消息框内。
定义协议格式为69/聊天数/聊天内容,协议头recestr.Left(2)=69。
8.4.2.4 文件传输
在本系统中,文件传输功能模块采用动态链接的方式实现,利用CSocket类编程模型建立了能够在通信双方之间进行文件传输的功能。考虑到用户传输文件的大小不定,为不丢失数据,文件传输功能的实现设计为:首先,在发送方和接收端都定义一个文件信息属性结构体,先发送此结构体,再在发送端循环读文件,循环传送;接收端先接收文件结构体,再循环写文件。以客户端接收文件为例,部分源程序如下:
从CSocket派生自己的类,然后创建新的线程,在新的线程中实现类的应用,重载Csocket类的OnReceive()和OnSend()函数,这样就可以解决线程阻塞和不能发送大文件的问题,或者采用文件分割传输,在传输过程中调用sleep()等函数,实现文件的传输。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。