資源簡(jiǎn)介
vc編寫UDP封裝類(實(shí)用),注釋很詳盡,應(yīng)用很方便。值得學(xué)習(xí)和參考的代碼!

代碼片段和文件信息
#include?“stdafx.h“
#include?
#include?“UdpEx.h“
#ifdef?LogN
#define?Log?LogN(4000)
#elif?(defined?TRACE)
#define?Log?TRACE
#else
#define?Log
#endif
//靜態(tài)實(shí)例成員
CUdpEx?CUdpEx::m_sInstance;
/*******************************************************************************
*?函數(shù)名稱:
*?功能描述: 向指定IP地址和端口發(fā)送數(shù)據(jù)。
*?輸入?yún)?shù): lpszIP --?目標(biāo)IP地址。
* nPort --?端口號(hào)。
* pData --?數(shù)據(jù)緩沖區(qū)。
*
*?輸出參數(shù):
*?返?回?值: 成功發(fā)送完指定的長(zhǎng)度返回TRUE,反之返回FALSE。
*?其它說(shuō)明:
*?修改日期 修改人 修改內(nèi)容
*?------------------------------------------------------------------------------
*?2008-04-23 周鋒 ?????? 創(chuàng)建
*******************************************************************************/
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(“創(chuàng)建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?
0?
(sockaddr*)?&addrRecv?
(int)sizeof(addrRecv));
#if?(defined?_WIN32)?||?(defined?_WINDOWS_)
closesocket(hSocket);
#else
close(hSocket);
#endif
return?(nSended?==?nLen);
}
/*******************************************************************************
*?函數(shù)名稱:
*?功能描述: 啟動(dòng)UDP數(shù)據(jù)監(jiān)聽,如果成功將會(huì)把數(shù)據(jù)通過指定回調(diào)函數(shù)返回。
*?輸入?yún)?shù): nPort --?監(jiān)聽的端口號(hào)。
* pfnData --?數(shù)據(jù)反饋的回調(diào)函數(shù)。
* lpszLocalIP --?本機(jī)IP地址,可為空字符串,不可為NULL,輸入空字符串將在所有網(wǎng)卡上進(jìn)行監(jiān)聽。
* lpszMultiIP --?組播地址,可為空字符串,不可為NULL,輸入空字符串將不會(huì)接受組播信息。
*?輸出參數(shù):
*?返?回?值: 啟動(dòng)監(jiān)聽返回TRUE,失敗返回FALSE。
*?其它說(shuō)明:
*?修改日期 修改人 修改內(nèi)容
*?------------------------------------------------------------------------------
*?2008-04-23 周鋒 ?????? 創(chuàng)建
*******************************************************************************/
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);
//設(shè)置端口復(fù)用
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;
}
//設(shè)置Socket緩沖(一般默認(rèn)是8192)
int?nRcvBuffSize?=?8192?*?100;
if(0?!=?setso
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????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
評(píng)論
共有 條評(píng)論