admin管理员组

文章数量:1531793

2024年3月23日发(作者:)

办公QQ通讯系统技术文档(UDP版)

一、总体功能介绍:

由于在之前通讯过程中,发现WCF通讯方式有一定局限性,不能很好的跨越Internet,

与手机端通讯只能采用调用服务的方式(类似于webservice,不能使用WCF双工通信),无法

实现与手机端双向通信。因此开发了一套UDP通讯方式的办公通讯系统。

但是基本的UDP通讯有丢包现象,并且在网络拥堵时先后顺序可以混乱,Internet网络

中通讯时,UDP数据包超过548字节会引起错误。因此在参考了飞鸽传输等局域网通讯程序

后,重新封装了UDP通讯类,增加了数据包自动重复发送与确认功能,防止丢包;并增加

了包序号,防止UDP数据包乱序;增加了分包发送功能,在数据包大于548字节时,分成

若干子数据包发送,防止数据包过大引起的异常。

对象在发送端首先转换为Json串,然后进行数据压缩,以便减少数据量,再发送给UDP

服务器,服务器根据用户名查找指定用户的ip与端口号,然后转发消息给目标用户。目标

用户在收到消息后,首先解压数据,获得Json串,然后根据通讯操作命令,获取对应的对

象实例,完成一次通讯过程。

系统的界面高度模仿腾讯QQ,并在其基础上做相应调整,以便于适应企业办公聊天通

讯使用。

二、UDP通讯实现:

(1)udplib类库

本系统的全部udp通讯类与数据模型封装在一个类库项目中,便于客户端与服务器端统一

使用统一套通讯程序来通讯。

(2)UDP通讯类 ead

在TCP/IP的UDP协议基础上,重新封装了UDP通讯类,增加了数据包自动重复发送与

确认功能,防止丢包;并增加了包序号,防止UDP数据包乱序;增加了分包发送功能,在

数据包大于548字节时,分成若干子数据包发送,防止数据包过大引起的异常。

(3)UDP传输类ns

以UDPThread作为基础传输协议,在此基础上实现对象在发送端首先转换为Json串,

然后进行数据压缩,以便减少数据量,再发送给UDP服务器,服务器根据用户名查找指定

用户的ip与端口号,然后转发消息给目标用户。目标用户在收到消息后,首先解压数据,

获得Json串,然后根据通讯操作命令,获取对应的对象实例,完成一次通讯过程。

(4)客户端通讯类:Communication

以UDPTrans类为基础,封装客户端对服务器的基本调用方法:

1、用户登录方法

public string Login(UserModel user)

2、根据用户id获取用户对象

public List getUserListByUserId(string userid)

3、根据用户账号获取用户对象

public List getUserListByName(string username)

4、获取全部用户对象列表

public List getAllUsers()

5、由用户账号获取好友分组

public List getUserGroup(string username)

6、由用户账号,好友分组名称获取好友分组下的好友列表

public List getGroupFriends(string username, string groupname, string arg)

7、获取系统客服列表

public List getCustomerServer(string arg)

8、获取公司部门列表

public List getPartList()

9、获取最近联系人列表

public List getContacts(string username, int days, string arg)

10、由用户账号获取其QQ群列表

public List getQQGroup(string username, string arg)

11、发送聊天信息对象

public void sendSay(ChatMsgModel msg)

(5)服务器端通讯逻辑处理类:

1、处理客户端登录请求

public static void login(SPackage pack, UdpTrans trans, IPEndPoint remoteip)

2、处理客户端根据用户id获取用户对象请求

public static void getUserListByUserId(SPackage pack, UdpTrans trans, IPEndPoint remoteip)

3、处理客户端根据用户账号获取用户对象请求

public static void getUserListByName(SPackage pack, UdpTrans trans, IPEndPoint remoteip)

4、处理客户端获取全部用户对象列表请求

public static void getAllUsers(SPackage pack, UdpTrans trans, IPEndPoint remoteip)

5、处理客户端获取分组好友请求

public static void getGroupFriends(SPackage pack, UdpTrans trans, IPEndPoint remoteip)

6、处理客户端获取系统客服请求

public static void getCustomerServer(SPackage pack, UdpTrans trans, IPEndPoint remoteip)

7、处理客户端获取好友分组请求

public static void getUserGroup(SPackage pack, UdpTrans trans, IPEndPoint remoteip)

8、处理客户端获取部门列表请求

public static void getPartList(SPackage sPackage, UdpTrans trans, IPEndPoint remoteip)

本文标签: 用户获取客户端数据包发送