设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 2401|回复: 0

2015-05-21 客户端SDK开放网络数据发送回调接口

[复制链接]

240

主题

2958

帖子

8871

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8871
发表于 2015-5-21 21:06:09 | 显示全部楼层 |阅读模式
AnyChat新版本(r4608)开放了客户端的流媒体数据发送回调接口,通过该接口AnyChat内核将底层网络数据包回调给上层应用,由上层应用自主实现数据的发送过程。特别是一些对网络发包间隔有严格要求的网络环境下,由上层应用自定义数据包的发送是较好的一种解决方案。

新增回调函数:

  1. // 网络数据发送回调函数定义
  2. typedef DWORD (CALLBACK * BRAC_NetworkDataSend_CallBack)(DWORD hSocket, DWORD dwFlags, CHAR* lpBuf, DWORD dwSize, DWORD dwTargetAddr, DWORD dwTargetPort, LPVOID lpUserValue);
复制代码
示例代码:

  1. /**
  2. *        网络数据发送回调函数定义
  3. *        @param hSocket 用于发送数据的Socket句柄
  4. *        @param dwFalgs 标识,备用
  5. *        @param lpBuf 数据缓冲区
  6. *        @param dwSize 缓冲区大小
  7. *        @param dwTargetAddr 目标IP地址,主机字节序
  8. *        @param dwTargetPort 目标端口,主机字节序
  9. *        @return 返回实际发送成功的字节数,若失败则返回-1
  10. */
  11. DWORD CALLBACK OnAnyChatNetworkDataSendCallBack(DWORD hSocket, DWORD dwFlags, CHAR* lpBuf, DWORD dwSize, DWORD dwTargetAddr, DWORD dwTargetPort, LPVOID lpUserValue)
  12. {
  13.         SOCKADDR_IN addr = {0};
  14.         addr.sin_family = AF_INET;
  15.         addr.sin_port = htons((USHORT)dwTargetPort);
  16.         addr.sin_addr.s_addr  = htonl(dwTargetAddr);
  17.         int ret = ::sendto(hSocket, lpBuf, dwSize, 0, (struct sockaddr FAR *) &addr, sizeof(addr));
  18.         return ret;
  19. }


  20. // 初始化SDK
  21. BRAC_InitSDK(...);

  22. // 注册回调函数
  23. BRAC_SetCallBack(BRAC_CBTYPE_NETWORKDATASEND, (void*)OnAnyChatNetworkDataSendCallBack, this);
复制代码
若想自定义发送间隔,则可以:
1、回调函数中:OnAnyChatNetworkDataSendCallBack,保存数据到一个列表中,保存目标地址,保存Socket句柄,然后返回数据长度(return dwSize),欺骗内核数据发送成功了;
2、另外开一个数据发送的线程,重列表中取数据,取目标地址,取Socket句柄,然后调用sendto函数真正发送数据;
3、需要考虑多线程的互斥,保存数据到列表、发送数据线程取数据时,需要对列表加锁处理;
4、不能对lpBuf进行拆包,如dwSize=1000,先发前面的500,再发后面的500,会导致数据接收失败,因为接收端不会自己组包。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|AnyChat ( 粤ICP备13022410号-1 )  

GMT+8, 2020-2-29 17:27 , Processed in 0.131281 second(s), 27 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表