final edit 2015-01-03
· 实现平台:
Window 8.1,Visual Studio 2013
Window 7, Visual Studio 2010
· 所用框架:
是基于Microsoft MFC框架的编程,以及基于html,css和javascript的web编程。
· 编程语言:
C++,java
· 软件介绍(Introduction):
MINET是一款能够进行群聊和P2P私聊的软件。我们通过一个服务器进行中介传输,使客户端之间可以进行通信。
· 功能简介:
P2P聊天功能
群聊功能(聊天室)
同一网段(WIFI/校园网)之间通信
匿名聊天功能
修改用户个性签名功能
后台数据库储存用户昵称,个性签名,在线状态
在线用户列表,离线用户列表
· 工程设计(Project Design):
概要:
协议:本软件的聊天功能基于UDP,经过测试,socket会出现不稳定情况。
服务器:每个客户端与服务器之间都用一个socket连接。服务器的功能包括数据库读写,P2P之间的消息转发,群聊时消息的广播,在线/离线用户列表的更新广播
客户端:客户端的功能主要包括发送聊天内容,发送个性签名更新,以及对从服务器中收到的消息进行分类处理。客户端根据从服务器接收的消息的type
过程:
每个客户端连接服务器用了一个socket,代码是写在MINET.cpp里面,也就是MAIN函数中,当我们的对话框发送消息时首先发给对话框所对应的客户端,然后由客户端的socket发送给服务器,那么服务器接收到消息之后,要转发消息,也是先发送个每个客户端,然后客户端再把消息怎么处理显示在对应的对话框中,我们的聊天都是使用服务器作为转发,就算是P2P的聊天也是利用服务器进行转发,群聊和私聊的不同就是转发的对象不通,怎么转发,下面介绍服务器的socket的实现会具体指出。
报文头的定义以及报文发送的格式:
Head.h:
其中,我们的header中的type定义了4中类型,登陆,发送消息,退出,更新在线用户列表。
我们socket中的消息通过两条发送,第一个是消息的类型,及即将要发送的第二条消息的长度,第二条消息即为发送的内容。第二条消息定义的格式如下,3#A#B#C#msg,可以解读为,3为当前聊天的人数,A为发消息的客户端(sender)而后面的两个B,C即为接收消息的两人(receiver),真正在对话框里显示的是msg,所以我们添加的匿名的额外功能可以直接改变msg的值,那么就会变得十分简单了。
服务器:
发送消息的方法:
1.构建head。
const int MSG_LOGOIN = 0x01; //登录
const int MSG_SEND = 0x11; //发送消息
const int MSG_CLOSE = 0x02; //退出
const int MSG_UPDATE = 0x21; //更新信息
typedef struct tagHeader{
int type ;//协议类型
int nContentLen; //将要发送内容的长度
}HEADER ,*LPHE