C++第三方库HPSocket数据的发送与接收
来源:互联网 发布:网络研修 编辑:程序博客网 时间:2024/05/16 15:39
发送数据
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,略有修改。
阅读全文
0 0
- C++第三方库HPSocket数据的发送与接收
- ios socket第三方框架 AsyncSocket使用简介,连接,心跳,断线,数据发送与接收
- ios socket第三方框架 AsyncSocket使用简介,连接,心跳,断线,数据发送与接收
- Socket —>AsyncSocket(ios socket第三方框架 AsyncSocket使用简介,连接,心跳,断线,数据发送与接收)
- HttpConnection的post请求发送数据,接收方出现乱码
- 带外数据的接收与发送
- JAVA---udp数据的发送与接收
- 数据的接收与发送(练习)
- C#----串口数据接收发送
- API两个程序间信息的传送与接收,一方发送另一方自动接收.
- Android Socket 发送与接收数据问题: 发送后的数据接收到总是粘包
- Android Socket 发送与接收数据问题: 发送后的数据接收到总是粘包
- Android Socket 发送与接收数据问题: 发送后的数据接收到总是粘包
- UDP发送与接收数据
- 发送与接收float数据
- rdt3.0发送方和接收方程序(C实现)
- java 简单的TCP接收数据与发送数据
- 纯 java 实现 Http 资源读取工具,支持发送和接收数据,不依赖任何第三方 jar 包
- C++ 类的空间大小计算基本方法
- 前端项目应该如何部署
- keras mnist cnn example
- ubuntu linux下解决“no java virtual machine was found after searching the following locations:” 方法
- android studio 引用Module或者第三方librar引起的jar冲突
- C++第三方库HPSocket数据的发送与接收
- 解耦与接口-程序员系列第二弹
- Tomcat详解
- HTMl5的sessionStorage和localStorage
- C#委托 子窗体给父窗体传值 用于进度条
- POJ-1679-The Unique MST [最小生成树][次小生成树]
- HDU 4422 The Little Girl Who Picks Mushrooms
- Centos 6关闭桌面
- HDU-2191-悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(典型的多重背包)