谢欣伦 - 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 ...
随机推荐
- STM32F103之DMA
一.背景: 需要使用STM32的DAC,例程代码中用了DMA,对DMA之前没有实际操作过,也很早就想知道DMA到底是什么,因此,看了一下午手册,代码和网上的资料,便有了此篇文章,做个记录. 二.正文: ...
- CSS样式自动换行(强制换行)与强制不换行
自动换行问题,正常字符的换行是比较合理的,而连续的数字和英文字符常常将容器撑大,挺让人头疼,下面介绍的是CSS如何实现换行的方法 对于div,p等块级元素,正常文字的换行(亚洲文字和非亚洲文字)元素拥 ...
- T-SQL 语句的理解
1.T-SQL中各子句在逻辑上按照以下顺序进行处理 . . . .. .ORDER BY 查询实例: SELECT EMPID, YEAR(ORDERDATE) AS ORDERYEAR, COUNT ...
- CF720F
题目描述 给定1≤n≤100000,1≤k≤n(n-1)/2,和〈a_1, ... ,a_n〉,其中-50000≤a_i≤50000, 要求选出k个不同的子段,使得每个元素都被这些子段覆盖且这k个子段 ...
- jQuery表单编程实例
input type=radio 和 select option 操作input type=radio 定位 select option $(function () { $("input[n ...
- Dynamic range compression
这段时间终于把手头的东西都搞完了,还剩下一个AEC这个模块,这个模块跟整个系统机制有很大关系,单独的模块意义不大. 另外,刚写完一个分类器,希望能大幅提升音乐流派分类的准确率. 下周正式开搞AEC,把 ...
- myecplise 中文乱码
一.设置新建常见文件的默认编码格式,也就是文件保存的格式. 在不对MyEclipse进行设置的时候,默认保存文件的编码,一般跟简体中文操作系统(如windows2000,windowsXP)的编码一致 ...
- Outlook~设置
outlook2013 中帐户设置无法直接更改邮件投递位置到本地的.pst文件,“更改文件夹”选项已经删除. Exchange 传递到 Outlook 数据文件 (.pst) 升级到 Outlook ...
- Memcache之内存分配机制
可参见:http://blog.csdn.net/hguisu/article/details/7353482
- iOS //清除本地缓存
//清除本地缓存 -(void)clearCache{ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT ...