资源简介

vc编写UDP封装类(实用),注释很详尽,应用很方便。值得学习和参考的代码!

资源截图

代码片段和文件信息

#include “stdafx.h“
#include 
#include “UdpEx.h“

#ifdef LogN
#define Log LogN(4000)
#elif (defined TRACE)
#define Log TRACE
#else
#define Log
#endif

//静态实例成员
CUdpEx CUdpEx::m_sInstance;

/*******************************************************************************
* 函数名称:
* 功能描述: 向指定IP地址和端口发送数据。
* 输入参数: lpszIP -- 目标IP地址。
* nPort -- 端口号。
* pData -- 数据缓冲区。
*
* 输出参数:
* 返 回 值: 成功发送完指定的长度返回TRUE,反之返回FALSE。
* 其它说明:
* 修改日期 修改人 修改内容
* ------------------------------------------------------------------------------
* 2008-04-23 周锋        创建
*******************************************************************************/
BOOL CUdpEx::SendUdpData(LPCSTR lpszIP int nPort const char *pData int nLen)
{
Log(“Func -- BOOL CUdpEx::SendUdpData(%s %n %p %n)“
lpszIP nPort pData nLen);

SOCKET_HANDLE hSocket;
struct sockaddr_in addrRecv;
if (0 == (hSocket = socket(AF_INET SOCK_DGRAM IPPROTO_UDP)))
{
Log(“创建UDP Socket句柄失败!“);
return FALSE;
}
addrRecv.sin_family = AF_INET;
addrRecv.sin_port = htons(nPort);
addrRecv.sin_addr.s_addr = inet_addr(lpszIP);
int nSended = sendto(hSocket 
pData 
nLen 

(sockaddr*) &addrRecv 
(int)sizeof(addrRecv));

#if (defined _WIN32) || (defined _WINDOWS_)
closesocket(hSocket);
#else
close(hSocket);
#endif

return (nSended == nLen);
}

/*******************************************************************************
* 函数名称:
* 功能描述: 启动UDP数据监听,如果成功将会把数据通过指定回调函数返回。
* 输入参数: nPort -- 监听的端口号。
* pfnData -- 数据反馈的回调函数。
* lpszLocalIP -- 本机IP地址,可为空字符串,不可为NULL,输入空字符串将在所有网卡上进行监听。
* lpszMultiIP -- 组播地址,可为空字符串,不可为NULL,输入空字符串将不会接受组播信息。
* 输出参数:
* 返 回 值: 启动监听返回TRUE,失败返回FALSE。
* 其它说明:
* 修改日期 修改人 修改内容
* ------------------------------------------------------------------------------
* 2008-04-23 周锋        创建
*******************************************************************************/
BOOL CUdpEx::StartReceive(int nPort 
  DataReceiveCallbackType pfnData 
  LPVOID lpContext
  LPCSTR lpszLocalIP 
  LPCSTR lpszMultiIP)
{
Log(“Func -- BOOL CUdpEx::StartReceive(%d %p %s %s)“ nPort pfnData lpszLocalIP lpszMultiIP);

sockaddr_in addrRecv;
struct ip_mreq mreq;
SOCKET_HANDLE hSocket = socket(AF_INET SOCK_DGRAM IPPROTO_UDP);
addrRecv.sin_family = AF_INET;
addrRecv.sin_port = htons(nPort);
addrRecv.sin_addr.s_addr = inet_addr(lpszLocalIP);

//设置端口复用
BOOL bSockReuse = TRUE;
int iRet = setsockopt(hSocket 
SOL_SOCKET
SO_REUSEADDR
(VAL_TYPE)&bSockReuse sizeof(bSockReuse));


//邦定socket
if(0 != bind(hSocket (sockaddr *) &addrRecv sizeof(addrRecv)))
{
Log(“端口地址绑定失败<%s:%d> -- <%d>!“ lpszLocalIP nPort WSAGetLastError());
#if (defined _WIN32) || (defined _WINDOWS_)
closesocket(hSocket);
#else
close(hSocket);
#endif
return FALSE;
}

//设置Socket缓冲(一般默认是8192)
int nRcvBuffSize = 8192 * 100;
if(0 != setso

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      33792  2011-11-17 15:02  UDP封装类\Debug\vc60.idb

     文件      28672  2011-11-17 15:02  UDP封装类\Debug\vc60.pdb

     文件      11930  2008-07-08 17:26  UDP封装类\UdpEx.cpp

     文件       3449  2011-11-17 15:04  UDP封装类\UdpEx.dsp

     文件        518  2009-05-02 14:12  UDP封装类\UdpEx.dsw

     文件       3023  2008-05-08 11:16  UDP封装类\UdpEx.h

     文件      50176  2011-11-17 15:04  UDP封装类\UdpEx.ncb

     文件      53760  2011-11-17 15:04  UDP封装类\UdpEx.opt

     文件       1285  2011-11-17 15:02  UDP封装类\UdpEx.plg

     文件      14726  2008-07-25 16:32  UDP封装类\udpex_new\udpex\UdpEx.cpp

     文件       4171  2008-07-25 16:28  UDP封装类\udpex_new\udpex\UdpEx.h

     文件       5122  2008-07-25 17:16  UDP封装类\udpex_new.rar

     文件      11971  2008-07-09 11:19  UDP封装类\udpex_old\UdpEx.cpp

     文件       3023  2008-05-08 11:16  UDP封装类\udpex_old\UdpEx.h

     文件       4392  2008-07-25 17:16  UDP封装类\udpex_old.rar

    ..A.SHR       120  2008-12-29 13:48  UDP封装类\vssver2.scc

     目录          0  2009-04-27 17:53  UDP封装类\udpex_new\udpex

     目录          0  2011-11-17 14:59  UDP封装类\Debug

     目录          0  2009-04-27 17:53  UDP封装类\udpex_new

     目录          0  2009-04-27 17:53  UDP封装类\udpex_old

     目录          0  2011-11-17 15:04  UDP封装类

----------- ---------  ---------- -----  ----

               230130                    21


评论

共有 条评论