谢欣伦 - OpenDev原创教程 - 无连接套接字类CxUdpSocket
这是一个精练的无连接套接字类,类名、函数名和变量名均采用匈牙利命名法。小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合。
CxUdpSocket的使用如下(以某个叫做CSomeClass的类的相关代码为例):
一、声明无连接套接字对象实例。
CxUdpSocket m_usRemoteHost;
二、设置无连接套接字事件通知方式。消息响应或回调函数,任选其一。无连接套接字事件有:缓冲区有数据可接收。
void CSomeClass::PreSubclassWindow()
{
// TODO: Add your specialized code here and/or call the base class
HWND hwnd = GetSafeHwnd();
MSG msg = {hwnd, WM_SOCKET_EVENT};
m_usRemoteHost.SetWindowMessage(&msg);
m_csRemoteHost.SetWindowMessage(&msg);
m_ssLocalHost.SetWindowMessage(&msg); if (m_btCSMode == CSM_SERVER)
ListenRemoteHost(); CStatic::PreSubclassWindow();
}
三、绑定无连接套接字
BOOL CSomeClass::BindToLocalHost()
{
if (m_usRemoteHost.IsBinded())
m_usRemoteHost.Disbind(); BOOL bRet = m_usRemoteHost.Bind(m_nUdpPort); CString str;
if (!bRet)
str.Format("Bind to %d failed. err code [%d].\n", m_nUdpPort,
CxSocket::WSAGetLastError());
else
str.Format("Bind to %d succeed.\n", m_nUdpPort);
OutputDebugString(str); return bRet;
}
四、处理消息响应或函数回调。
1.消息响应
BEGIN_MESSAGE_MAP(CSomeClass, CStatic)
//{{AFX_MSG_MAP(CSomeClass)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_SOCKET_EVENT, OnSocketEvent)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSomeClass message handlers
LRESULT CSomeClass::OnSocketEvent(WPARAM wParam, LPARAM lParam)
{
if (WSAGETSELECTERROR(lParam) != )
return ; int nEvent = WSAGETSELECTEVENT(lParam);
switch (nEvent)
{
case FD_ACCEPT: OnSocketAccept(wParam); break;
case FD_CLOSE: OnSocketClose(wParam); break;
case FD_READ: OnSocketRead(wParam); break;
default: break;
} return ;
} void CSomeClass::OnSocketRead(WPARAM wParam)
{
if (m_usRemoteHost.GetSocket() == (SOCKET)wParam)
{
SOME_DATA_STRUCT data = {};
char szIPAddr[MAX_IPV6] = {'\0'};
if (m_usRemoteHost.RecvFrom(szIPAddr, (LPBYTE)&data, sizeof(data)))
{
//do something with data;
}
}
}
2.回调函数
LRESULT CALLBACK CSomeClass::SocketProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LRESULT lRet = ;
CSomeClass* pThis = (CSomeClass*)hwnd;
if (pThis != NULL)
lRet = pThis->OnSocketEvent(wParam, lParam); return lRet;
}
注意,在使用回调函数时应设置无连接套接字接收缓冲区事件通知方式为回调函数,并且设法把this指针传入设置函数,方便在回调函数中调用成员函数。
MSG msg = {(HWND)this, WM_SOCKET_EVENT};
m_usRemoteHost.SetWindowMessage(&msg, SocketProc);
五、解绑定无连接套接字。
void CSomeClass::OnDestroy()
{
CStatic::OnDestroy(); // TODO: Add your message handler code here
TerminateWaitComm(); m_csRemoteHost.DisConnect();
m_ssLocalHost.DisListen();
m_usRemoteHost.Disbind();
}
至于无连接套接字数据发送,很简单,在需要处调用以下函数:
m_usRemoteHost.Send((LPBYTE)pData, sizeof(SOME_DATA_STRUCT));
精练的代码不需要过多解释,你们懂的。To be continued...
下载
Sample using libComm - v1.1 For WinXP
谢欣伦 - OpenDev原创教程 - 无连接套接字类CxUdpSocket的更多相关文章
- 谢欣伦 - OpenDev原创教程 - 客户端套接字类CxClientSocket
这是一个精练的客户端套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxClientSocket的使用如下(以某个叫做CSo ...
- 谢欣伦 - OpenDev原创教程 - 服务端套接字类CxServerSocket
这是一个精练的服务端套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxServerSocket的使用如下(以某个叫做CSo ...
- 谢欣伦 - OpenDev原创教程 - 媒体开发库libMedia
libMedia是一个免费的简单的媒体开发库,其中的接口类与函数大都以小写的x打头,来源于我的姓氏首字母(谢欣伦). 下载 OpenDev for VS2012 libMedia提供四大功能,一是视频 ...
- 谢欣伦 - OpenDev原创教程 - 蓝牙设备查找类CxBthRadio & CxBthRadioFind
这是一个精练的蓝牙设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxBthRadioFind的使用如下: void CU ...
- 谢欣伦 - OpenDev原创教程 - 蓝牙设备查找类CxBthRemoteDeviceFind
这是一个精练的蓝牙设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxBthRemoteDeviceFind的使用如下: ...
- 谢欣伦 - OpenDev原创教程 - 串口类CxSerial
这是一个精练的串口类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. 串口类CxSerial的使用如下(以某个叫做CSomeClass ...
- 谢欣伦 - OpenDev原创教程 - 网络设备查找类CxNetworkHostFind & CxNetworkAdapterFind
这是一个精练的网络设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxNetworkHostFind的使用如下: void ...
- 谢欣伦 - OpenDev原创教程 - 本地IP查找类CxLocalHostIPAddrFind
这是一个精练的本地IP查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxLocalHostIPAddrFind的使用如下: ...
- 谢欣伦 - OpenDev原创教程 - 设备查找类CxDeviceFind & CxDeviceMapFind
这是一个精练的设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxDeviceFind的使用如下: void CUsbSc ...
随机推荐
- .htaccess 基础教程(四)Apache RewriteCond 规则参数
Apache模块 mod_rewrite 提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求.它支持每个完整规则可以拥有不限数量的子规则以及附加条件规则的灵活而且强大的URL操作机制.此UR ...
- Mac Pro 安装 Sublime Text 3,个性化设置,主题 和 插件 收藏
1.到官网下载安装包 http://www.sublimetext.com/3 2.附注册码一枚 Sublime Text 3 3126 —– BEGIN LICENSE —– Alexey Plut ...
- C和指针 第十四章 预处理器 头文件
编写一个C程序,第一个步骤称为预处理,预处理在代码编译之前,进行一些文本性质的操作,删除注释.插入被include的文件.定义替换由#define定义的符号,以及确定代码的部分内容是否应该按照条件编译 ...
- Android 图片滤镜工具——高斯模糊
===================高斯模糊========================= 创建一个 ImageFilter 类(滤镜工具),代码如下: import android.graph ...
- linux c 笔记-4 工程项目阅读推荐
作者:周子涵链接:https://www.zhihu.com/question/27705862/answer/37738315来源:知乎著作权归作者所有,转载请联系作者获得授权. 转自网上不知道什么 ...
- Mac键盘图标与对应快捷按键标志汇总
Mac键盘图标与对应快捷按键 ⌘--Command () win键 ⌃ --Control ctrl键 ⌥--Option (alt) ⇧--Shift ⇪--Caps Lock fn--功能键就是 ...
- 【krpano】汉化Web VR设置界面
欢迎加入qq群551278936讨论krpano解密技术以及获取最新软件 krpano 1.19支持了Web VR功能,允许以VR的方式查看全景图,配合上VR设备可以实现VR效果. 在VR方式查看时, ...
- opendrive
opendrive和其他许多网盘一样.注册拥有5G的免费空间.每天1G的免费外链流量.更重要的是,他能够给你提供一个直接外链!这是国内外许多网盘都没有的.当你上载了一个MP3,你想用直接外链的形式在博 ...
- qt creator 源代码中含有中文编译报错
Tools-Options-Text Editor-Behavior-File Encoding-Default encoding:UTF-8 Tools-Options-Text Editor-Be ...
- VIM退出命令
注意:这些命令前面都有一个冒号: 当编辑完文档,准备退出Vi返回到shell时,能够使用以下几种方法之一. 在命令模式中,连按两次大写字母Z,若当前编辑的文档曾被修改过,则Vi保存该文档后退出,返回到 ...