发送数据

 CString bodyDesc;m_Content.GetWindowText(bodyDesc);SendData2("怪兽乐园", 23, bodyDesc);
void CClientDlg::SendData2(LPCSTR bodyName, short bodyAge, CString bodyDesc)
{static DWORD SEQ = 0;USES_CONVERSION;LPCSTR name = bodyName;LPCSTR desc = T2A((LPCTSTR)bodyDesc);int desc_len = (int)strlen(desc) + 1;int body_len = offsetof(TPkgBody, desc) + desc_len;TPkgBody* pBody = (TPkgBody*)_alloca(body_len);memset(pBody, 0, body_len);pBody->age = bodyAge;strcpy(pBody->name, name);strcpy(pBody->desc, desc);TPkgHeader header;header.seq = ++SEQ;header.body_len = body_len;WSABUF bufs[2];bufs[0].len = sizeof(TPkgHeader);bufs[0].buf = (char*)&header;bufs[1].len = body_len;bufs[1].buf = (char*)pBody;if (m_Client->SendPackets(bufs, 2))  //发送多组数据(2组)::LogSend(m_Client->GetConnectionID(), bodyDesc);else::LogSendFail(m_Client->GetConnectionID(), ::SYS_GetLastError(), ::HP_GetSocketErrorDesc(SE_DATA_SEND));
}

接收数据

EnHandleResult CServerDlg::OnReceive(ITcpServer* pSender, CONNID dwConnID, int iLength)
{TPkgInfo* pInfo = FindPkgInfo(pSender, dwConnID);ITcpPullServer* pServer = ITcpPullServer::FromS(pSender);if (pInfo != nullptr){int required = pInfo->length;int remain = iLength;while (remain >= required){remain -= required;CBufferPtr buffer(required);EnFetchResult result = pServer->Fetch(dwConnID, buffer, (int)buffer.Size());if (result == FR_OK){if (pInfo->is_header){TPkgHeader* pHeader = (TPkgHeader*)buffer.Ptr();//TRACE("[Server] head -> seq: %d, body_len: %d\n", pHeader->seq, pHeader->body_len);required = pHeader->body_len;}else{TPkgBody* pBody = (TPkgBody*)(BYTE*)buffer;char *ch = pBody->name;int num = MultiByteToWideChar(0, 0, ch, -1, NULL, 0);//获得长字节所需的空间wchar_t *wide = new wchar_t[num];MultiByteToWideChar(0, 0, ch, -1, wide, num);m_Info.AddString(wide);   //在控件中显示nameitoa(int(pBody->age), ch, 10);   //将int转换为char*num = MultiByteToWideChar(0, 0, ch, -1, NULL, 0);//获得长字节所需的空间wide = new wchar_t[num];MultiByteToWideChar(0, 0, ch, -1, wide, num);m_Info.AddString(wide);  //在控件中显示agech = pBody->desc;num = MultiByteToWideChar(0, 0, ch, -1, NULL, 0);//获得长字节所需的空间wide = new wchar_t[num];MultiByteToWideChar(0, 0, ch, -1, wide, num);m_Info.AddString(wide); //在控件中显示desc//TRACE("[Server] body -> name: %s, age: %d, desc: %s\n", pBody->name, pBody->age, pBody->desc);required = sizeof(TPkgHeader);}pInfo->is_header = !pInfo->is_header;pInfo->length = required;::PostOnReceive(dwConnID, buffer, (int)buffer.Size());if (!pSender->Send(dwConnID, buffer, (int)buffer.Size()))  //发送数据return HR_ERROR;}}}return HR_OK;
}
TPkgInfo* CServerDlg::FindPkgInfo(ITcpServer* pSender, CONNID dwConnID)
{PVOID pInfo = nullptr;
pSender->GetConnectionExtra(dwConnID, &pInfo); //获取连接的附件数据
return (TPkgInfo*)pInfo; }

自定义类型

struct TPkgHeader
{DWORD seq;int body_len;
};struct TPkgBody
{char name[30];  short age;   char desc[1];
};
struct TPkgInfo
{bool is_header;int length;
TPkgInfo(bool header = true, int len = sizeof(TPkgHeader)) : is_header(header), length(len) {}void Reset() {is_header = true, length = sizeof(TPkgHeader);}~TPkgInfo() {} };

代码源自HPSocket的demo,略有修改。


C++第三方库HPSocket数据的发送与接收相关推荐

  1. python socket发送组播数据_python3通过udp实现组播数据的发送和接收操作

    本文主要通过对海康摄像头进行抓包,模拟发送了udp包,并抓取摄像头返回的数据包,解析并提取相关信息. 通过抓包发现,海康摄像头发送.接收数据使用udp协议,后来比较发现,使用python模拟起来比较简 ...

  2. rocket mq 监听端口_如何使用Jmeter实现MQ数据的发送和接收?性能测试实战篇

    JMeter是性能测试中被普遍使用的一种工具,常用于压力测试.该工具具有丰富的扩展插件用以满足不同情况下性能测试的需求.消息队列(Message Queue)简称为MQ,作为目前的主流中间件,在很多软 ...

  3. python获取本地时间并向服务器发送udp报文_python3通过udp实现组播数据的发送和接收操作...

    本文主要通过对海康摄像头进行抓包,模拟发送了udp包,并抓取摄像头返回的数据包,解析并提取相关信息. 通过抓包发现,海康摄像头发送.接收数据使用udp协议,后来比较发现,使用python模拟起来比较简 ...

  4. java串口发送十六进制数,本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下1.介绍使用Java实现的串口通信程序,支持十六进制数据的发送与接收。 源码:...

    本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下 1.介绍 使用Java实现的串口通信程序,支持十六进制数据的发送与接收. 源码:SerialPortDemo 效果图如下: ...

  5. 关于串口数据的发送和接收(调试必备)

    前言 对于串口的数据发送和接收,大多是都是利用串口中断来进行的,但是这样对于编程方面有一定要求,并且程序也不太好写,比如说,如果让你随意接收一段数据,然后利用串口将它发送出来,第一个需要考虑的问题就是 ...

  6. Android Wear开发 - 数据通讯 - 第二节 : 数据的发送与接收

    本节由介绍3种数据的发送接收: 1.Data Items : 比特类型数据,限制100KB以内 2.Assets : 资源类型数据,大小无上限 3.Message : 发送消息,触发指令 http:/ ...

  7. ZigBee组网机制以及数据的发送和接收

    Zigbee是一种新型的短距离无线通信技术.其特点是低功耗,低成本,组网灵活.Zigbee协议由zigbee联盟指定,包括应用层,和网络层,其下层采用IEEE802.15.4协议. 无论是学习zigb ...

  8. java-UDP协议实现数据的发送和接收

    实现发送端 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; im ...

  9. 教学5层网络体系结构——分层之后数据的发送和接收

    协议分层后数据发送过程 发送方层层封装 接收方层层解封装 唯一加尾部的是数据链路层 思考 发送方某层封装完如何知道该交给哪个下层封装? 应用层选择传输层由应用程序决定,传输层选择网络层由固定的搭配,例 ...

  10. 千兆网(2):数据的发送与接收测试

    难点: 多时钟的切换 相位偏移的数据同步 原语的使用 RTL结构视图与时钟网络 工程文件的路径: 其中RGMII_tx_ctrl模块为FPGA测试发送数据模块,依赖于仿真 RGMII_tx_ctrl的 ...

最新文章

  1. 您有一个新的订单mp3在线_Airtable,不仅仅是强大的在线表格应用,而是一个新物种...
  2. 如何正确配置Nginx+PHP
  3. java 动态读取文件_Java窗体动态加载磁盘文件的实现方法
  4. EOS绑定以太坊地址
  5. JS获取元素属性和自定义属性
  6. 前端初级html\css知识点总结
  7. 为Flash Builder/Professional更新Flash Player
  8. 利用Python下载文件
  9. 软考:数据库系统工程师
  10. 魔兽世界修改服务器配置文件,魔兽世界怀旧服出生参数修改和技能学习
  11. 牛客网经典120道Java面试常见题(试题+答案)
  12. 极速办公(excel)身份证中的出生日期如何提取
  13. 荣耀7升级android8,华为+荣耀7款老爷机齐升安卓8.0:最近两年全覆盖
  14. TCP协议-TCP服务特点和头部结构
  15. 如果想变强,有我在2
  16. 264编码 yocto_66AK2H06
  17. Scala的类型擦除 和 TypeTags、Manifests的用法
  18. php采集彩票开奖数据
  19. HTML基础学习笔记合集
  20. html如何设置文本框透明度,div设置透明度

热门文章

  1. 火狐浏览器快速代理插件(FoxyProxy Standard)
  2. 证件阅读机所能识别的类型与应用
  3. html多个div横向排列居中,多个div垂直居中横向排列的示例分析
  4. 图的深度优先遍历(DFS)
  5. Java在线问卷调查系统的分析与实现管理员功能模块
  6. pandownload如何使用cookie登录百度网盘账号
  7. js继承的几种方式,圣杯模式
  8. 分解gif图片并保存
  9. Tcp滑动窗口协议简介
  10. OSN3500设备PSXCS单板的工作原理和信号流