資源簡介
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?
0?
(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
評論
共有 條評論